2013-04-30 276 views
0

我想找出的已評估與批准授予的最高金額的提議細節。 有一些問題與查詢,這是錯誤消息。 試圖執行一個查詢,不包括指定表達式「標題」中的MS Access聚合函數。聚合函數查詢

SELECT Proposal.ProposalID, Proposal.Title, Proposal.RequestedAmmount, Researcher.Name, MAX(Proposal.RequestedAmmount) 
FROM Researcher, Proposal 
WHERE Researcher.ResearcherID=Proposal.ResearcherIDSub 
GROUP BY Proposal.ProposalID ; 

感謝

+0

一起考慮提供[的DDL](https://en.wikipedia.org/wiki/Data_definition_language)與一些樣品數據和期望的結果集 – Strawberry 2013-04-30 06:44:01

回答

2

GROUP BY查詢你需要組不屬於內部函數的所有paramters。所以在你的情況下Proposal.Title, Proposal.RequestedAmmount, Researcher.Name也需要分組。

您將需要重新看看你的SELECTGROUP BY聲明。看看你是否真的需要領域 - Proposal.TitleProposal.RequestedAmmount,​​。 如果你需要他們,你也需要將他們分組。

+0

我已經嘗試過了,但它的不返回TABLE中的所有記錄。 :( 但我想最大RequestedAmmount – user1534344 2013-04-30 06:37:52

+0

'GROUP BY Proposal.ProposalID,Proposal.Title,Proposal.RequestedAmmount,Researcher.Name'應該給所有的記錄,如果沒有,那麼你需要在選擇和分組添加額外的列由你知道將在分組後給所有記錄。 – Kshitij 2013-04-30 06:45:33

+0

其他選項是做一個內部'SELECT'查詢來獲取所有記錄。 – Kshitij 2013-04-30 06:46:06

0

您所查詢的有兩個問題:

  • 語法組由必須列出所有非集合列
  • 這是一個加盟 - 這意味着必須存在提案研究者要回;不建議研究人員將被排除在外,而不是在MAX()列

有NULL爲了解決這些問題,改變你的查詢

  • GROUP BY 1, 2, 3, 4(SQL標準允許按列組被引用雙方表達和列的位置 - 我找到位置更清晰,更方便,更簡潔)
  • 使用加入通過採用更現代的JOIN語法與左選項

如下:

SELECT 
    Proposal.ProposalID, 
    Proposal.Title, 
    Proposal.RequestedAmmount, 
    Researcher.Name, 
    MAX(Proposal.RequestedAmmount) 
FROM Researcher 
LEFT JOIN Proposal ON Researcher.ResearcherID=Proposal.ResearcherIDSub 
GROUP BY 1, 2, 3, 4;