2011-08-26 215 views
0

这是问题所在,我想在表格中显示一列的月份,计数和平均值,但当我尝试按月份对它进行分组时, 。SQL选择无效,因为它不包含在聚合函数中

这是代码:

SELECT MONTH(ContractDate) AS Q, 
     DATENAME(month, ContractDate) AS M, 
     COUNT(ContractDate) AS C, SUM(ContractPrice) AS S 
     FROM dashboard 
     WHERE YEAR(ContractDate) = $year 
     AND ContractDate IS NOT NULL 
     AND ContractPrice IS NOT NULL 
    GROUP BY MONTH(ContractDate) 

但是,这将导致错误:

[Microsoft][SQL Server Native Client 10.0][SQL Server] 
Column 'dashboard.ContractDate' is invalid in the select 
list because it is not contained in either an aggregate 
function or the GROUP BY clause. 

但是,如果我通过去除来自该组MONTH() ...它工作得很好。但我需要让他们按月分组,否则我得到同一个月的多个不算作一个。

对不起,我做了搜索,并有答案的HEAPS,但就像我说我是noob,他们并没有真正帮助我,因为我不明白为什么发生这种情况。

回答

5

您必须在GROUP BY中包含所有非聚合的列。您可以将DATENAME列添加到GROUP BY或将其从查询中完全删除。

GROUP BY MONTH(ContractDate) AS Q, DATENAME(month, ContractDate) 
+0

非常感谢你,这很简单......我想我一直在看代码,只是我已经失去了一点想法。 – ls009

0

尝试在删除DATENAME(month, ContractDate) AS M后执行查询。我想这是造成这个问题。您正在执行GROUP BY MONTH(ContractDate),但也尝试使用不在GROUP BY列表中的ContractDate

相关问题