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

如何按周一至周日排序SQL查询出的星期几订单统计结果?

解决按周一到周日排序订单统计的问题

可以通过引入星期对应的数字标识,并调整排序逻辑实现需求,修改后的代码如下:

SELECT 
    DATENAME(dw, orderDate) AS day_of_week, 
    COUNT(orderID) AS total_orders
FROM 
    Orders
GROUP BY 
    DATENAME(dw, orderDate),
    DATEPART(dw, orderDate)
ORDER BY 
    CASE DATEPART(dw, orderDate)
        WHEN 1 THEN 7  -- 将周日的排序值设为7,让它排在最后
        ELSE DATEPART(dw, orderDate) - 1
    END

说明:

  1. 原代码排序混乱的原因:DATENAME(dw, orderDate)返回的是星期名称文本,直接排序会遵循文本的自然顺序(比如英文按字母、中文按拼音),和实际星期顺序不符。
  2. DATEPART(dw, orderDate)的作用:返回星期对应的数字(SQL Server默认周日为1,周六为7),借助这个数字可以精准控制排序顺序。
  3. CASE语句的作用:通过逻辑调整,把周日的排序值改为7,其他星期的数字减1,最终实现周一到周日的顺序排列。
  4. GROUP BY的修改:因为排序用到了DATEPART(dw, orderDate),需要将它加入GROUP BY子句,保证分组逻辑正确。

如果你的SQL Server已设置周一为星期起始(可通过SET DATEFIRST 1配置),也可以简化排序逻辑:

SELECT 
    DATENAME(dw, orderDate) AS day_of_week, 
    COUNT(orderID) AS total_orders
FROM 
    Orders
GROUP BY 
    DATENAME(dw, orderDate),
    DATEPART(dw, orderDate)
ORDER BY 
    DATEPART(dw, orderDate)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:42:09