SQL选择无效,因为它不包含在聚合函数中

ls0*_*009 0 sql sql-server-2008

这是问题,我想在表格中显示一列的月份,计数和平均值,但是当我尝试按月分组时,我一直收到错误.

这是代码:

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)
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

[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.
Run Code Online (Sandbox Code Playgroud)

但是如果我把它MONTH()从组中移除......它工作得很好..但我需要按月分组,否则我得到同一个月的多个不算一个.

对不起,我做了搜索,并且有很多答案,但就像我说我是菜鸟,他们并没有真正帮助我,因为我不明白为什么会这样.

Ken*_*ite 5

您必须拥有所有不在聚合中的列GROUP BY.您可以将DATENAME列添加到GROUP BY查询中,也可以将其从查询中删除.

GROUP BY MONTH(ContractDate) AS Q, DATENAME(month, ContractDate)
Run Code Online (Sandbox Code Playgroud)