You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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统计数量,示例结构如下:

OSDEPARTMENTMONTH_NAMEYEAR
12部门A12月2024
8部门B12月2024
15部门A11月2024

内容的提问来源于stack exchange,提问作者rodrigojsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:50:45