2013-04-30 206 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;