从SQL Server 2008中的联接表中选择最大值

时间:2015-10-09 19:34:23

标签: sql-server sql-server-2008

我有两个表:dbo.Projectsdbo.Buffersdbo.Projects有很多dbo.buffers

我需要从dbo.Projects中选择不同的列,从MAX(PercentConsumed)中选择dbo.Buffers行,但我似乎无法弄明白。似乎SQL Server 2008不允许我获得最大值。

这是我到目前为止所拥有的:

SELECT 
P.ProjectName, P.ProjectManager, P.PlannedStart, MAX(B.PercentConsumed) AS 'PercentConsumed'
FROM dbo.Projects AS P
LEFT JOIN dbo.Buffers AS B ON P.ProjectID = B.ProjectID
GROUP BY P.ProjectName
HAVING P.ProjectType = 8 AND P.Category 23;

结果给了我同一个项目的多行,而我只想要B.PercentConsumed的最大值

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:2)

您的查询应该给您一个错误。

您需要按所有非聚合列分组:

SELECT 
P.ProjectName, P.ProjectManager, P.PlannedStart, MAX(B.PercentConsumed) AS 'PercentConsumed'
FROM dbo.Projects AS P
LEFT JOIN dbo.Buffers AS B ON P.ProjectID = B.ProjectID
WHERE P.ProjectType = 8 AND P.Category 23
GROUP BY P.ProjectName, P.ProjectManager, P.PlannedStart
;