SQL Server中按年月及部门分组统计OS数量的实现问题
SQL Server按年月+部门统计OS数量的语句优化
需求:在SQL Server中通过GROUP BY按月份、年份分组,统计各部门的OS数量。
用户原SQL语句:
SELECT COUNT(EVT_CODE) AS OS, EVT_MRC AS DEPARTMENT, DATENAME(MONTH, EVT_CREATED) AS MONTH, YEAR(EVT_CREATED) AS YEAR FROM R5EVENTS GROUP BY EVT_MRC, YEAR(EVT_CREATED), DATENAME(MONTH, EVT_CREATED) ORDER BY 'YEAR' DESC
问题修正
原语句的ORDER BY子句使用了字符串'YEAR',这会导致排序逻辑失效(实际是按固定字符串排序,而非年份字段)。需直接引用字段名进行排序,若需要按月份的自然顺序排列,建议补充月份数字字段避免按月份名称的字母顺序排序。
修正后的SQL语句(基础版):
SELECT COUNT(EVT_CODE) AS OS, EVT_MRC AS DEPARTMENT, DATENAME(MONTH, EVT_CREATED) AS MONTH, YEAR(EVT_CREATED) AS YEAR FROM R5EVENTS GROUP BY EVT_MRC, YEAR(EVT_CREATED), DATENAME(MONTH, EVT_CREATED) ORDER BY YEAR DESC, MONTH DESC
更严谨的版本(按月份数字排序,避免名称字母顺序偏差):
SELECT COUNT(EVT_CODE) AS OS, EVT_MRC AS DEPARTMENT, DATENAME(MONTH, EVT_CREATED) AS MONTH_NAME, MONTH(EVT_CREATED) AS MONTH_NUM, YEAR(EVT_CREATED) AS YEAR FROM R5EVENTS GROUP BY EVT_MRC, YEAR(EVT_CREATED), DATENAME(MONTH, EVT_CREATED), MONTH(EVT_CREATED) ORDER BY YEAR DESC, MONTH_NUM DESC
预期结果说明
结果需按年份降序、月份降序排列,每行展示对应年份、月份、部门的OS统计数量,示例结构如下:
| OS | DEPARTMENT | MONTH_NAME | YEAR |
|---|---|---|---|
| 12 | 部门A | 12月 | 2024 |
| 8 | 部门B | 12月 | 2024 |
| 15 | 部门A | 11月 | 2024 |
内容的提问来源于stack exchange,提问作者rodrigojsa
相关产品推荐
相关产品推荐

