GROUP BY和ORDER BY日期作为月份

Pir*_*e X 3 sql t-sql sql-server

我有以datetime格式存储的数据,即2016-01-20 03:00:11.000.

我的目标是以月(字符串)格式显示数据并按月显示.

我想得到什么(按月份排序) -

+----------+-------+
|  Month   | Count |
+----------+-------+
| January  |    87 |
| February |    64 |
| March    |    48 |
| April    |    67 |
| May      |    49 |
+----------+-------+
... rest of months
Run Code Online (Sandbox Code Playgroud)

我得到了什么(按字母排序而不是几个月) -

+-----------+-------+
|   Month   | Count |
+-----------+-------+
| April     |    87 |
| August    |    64 |
| December  |    48 |
| February  |    67 |
| January   |    49 |
| July      |    41 |
| June      |    44 |
| March     |    71 |
| May       |    62 |
| November  |    51 |
| October   |    44 |
| September |    48 |
+-----------+-------+
Run Code Online (Sandbox Code Playgroud)

我的尝试 -

  SELECT  DATENAME(MONTH,[mydate]) as Month, count([ID]) AS Count
  FROM [dbo].[mytable]
  group by DATENAME(MONTH,[mydate])
Run Code Online (Sandbox Code Playgroud)

尝试订购(不工作) -

SELECT  DATENAME(MONTH,[mydate]) as Month, count([mydate]) AS Count
  FROM [dbo].[mytable]
  group by DATENAME(MONTH,[mydate])
  ORDER BY MONTH([mydate])
Run Code Online (Sandbox Code Playgroud)

由于未正确使用聚合函数而导致此错误

它不包含在聚合函数或GROUP BY子句中.

我不知道如何在这种情况下继续进行.任何帮助表示赞赏.

tri*_*cot 5

您还需要按月份编号分组:

SELECT   DATENAME(MONTH,[mydate]) as Month,
         count([mydate]) AS DateCount
FROM     [dbo].[mytable]
GROUP BY MONTH([mydate]),
         DATENAME(MONTH,[mydate])
ORDER BY MONTH([mydate])
Run Code Online (Sandbox Code Playgroud)

注意:不要把你的计数称为Count,因为它是一个保留字.使用DateCount或其他.