0

我想了解已评估并获得最高批准拨款的提案的详细信息。查询有问题,这是错误消息。您尝试在 ms 访问中执行不包含指定表达式“标题”的查询作为聚合函数。

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

谢谢

4

2 回答 2

2

GROUP BY查询中,您需要对不在函数内部的所有参数进行分组。所以在你的情况下Proposal.Title, Proposal.RequestedAmmount, Researcher.Name也需要分组。

您将需要重新查看您的SELECTGROUP BY声明。看看你是否真的需要字段 - Proposal.Title, Proposal.RequestedAmmount, Researcher.Name. 如果您需要它们,那么您也需要将它们分组。

于 2013-04-30T06:33:32.200 回答
0

您的查询有两个问题:

  • 语法上,group by 必须列出所有非聚合列
  • 这是一个内部连接 ​​- 意味着必须存在让研究人员返回的建议;没有提案的研究人员将被排除在外,而不是在 MAX() 列中有一个 NULL

要解决这些问题,请将您的查询更改为

  • GROUP BY 1, 2, 3, 4(SQL 标准允许按列分组由表达式和列位置引用 - 我发现位置更清晰、更容易和更简洁)
  • 通过使用带有 LEFT 选项的更现代的 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;
于 2013-04-30T15:00:22.647 回答