如何在SQL Server中按YEAR-MM对DATE字段进行分组?

sor*_*rin 2 sql t-sql sql-server group-by sql-date-functions

我在查询中有一个日期字段,我确实希望得到这样的GROUP BY报告:

DATE    COUNT
2010-01  10
2010-02  2
...
2010-12  24
2012-13  34
Run Code Online (Sandbox Code Playgroud)

在SQL Server上获取此功能的正确语法是什么?

Aar*_*and 7

所有这些转换为字符串工作,但我发现这种方法更有效,尽管可读性较差:

SELECT m = DATEADD(MONTH, DATEDIFF(MONTH, 0, [DATE]), 0), COUNT(*)
  FROM dbo.TheTable
  GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, [DATE]), 0); 
Run Code Online (Sandbox Code Playgroud)

如果您不想重复表达式,那么:

;WITH x AS (SELECT m = DATEADD(MONTH, DATEDIFF(MONTH, 0, [DATE]), 0)
  FROM dbo.TheTable)
SELECT m, COUNT(*)
  FROM x GROUP BY m;
Run Code Online (Sandbox Code Playgroud)

这样输出仍然是日期/时间值,并且可以以其他方式使用.并且它不涉及任何杂乱的字符串转换.