我有此代码,可以成功显示根据星期几名称显示的订单数量。但是,我想按相应排序显示日期名称。我有以下代码:

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

这是输出:但我希望按星期一、星期二、星期三等顺序排列日期(名称)。

在此处输入图片描述

有什么想法吗?提前谢谢您。

4

  • 根据问题指南,请不要发布代码、数据、错误消息等的图片 – 将文本复制或键入到问题中。请保留将图像用于图表或演示渲染错误,这些内容无法通过文本准确描述。


    – 

  • 并且请提供可消耗形式的样本数据,create table ... insert into table...以便我们进行测试。


    – 

  • 3


    – 

  • 感谢您的所有评论和提醒。


    – 



最佳答案
2

我认为你正在寻找参数WEEKDAY例如

with cte as (
  select DateOfTest
  from (
    values
    ('19 Oct 2024'),
    ('18 Oct 2024'),
    ('17 Oct 2024'),
    ('16 Oct 2024'),
    ('15 Oct 2024'),
    ('14 Oct 2024'),
    ('13 Oct 2024')
  ) x (DateOfTest)
)
select *, datename(weekday, DateOfTest)
from cte
order by datepart(weekday, DateOfTest);

返回:

測試日期
2024 年 10 月 13 日 星期日
2024 年 10 月 14 日 周一
2024 年 10 月 15 日 周二
2024 年 10 月 16 日 周三
2024 年 10 月 17 日 周四
2024 年 10 月 18 日 星期五
2024 年 10 月 19 日 周六

所以你的查询变成了

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

注1:根据您的服务器设置和要求,您可能需要指定一周中哪一天是第一天,例如SET DATEFIRST 1;

注 2:我强烈建议使用完整的参数名称(例如,WEEKDAY而不是缩写)DW– 它可以让将来阅读您的查询的任何人更加清楚地理解。

1

  • 谢谢!这有效!在我的查询(datepart)中添加了最后一行。


    – 


根据您的 datefirst 设置,您可以尝试

SET DATEFIRST 1; -- first setting datefirst
SELECT 
    DATENAME(weekday, orderDate) AS day_of_weeks, 
    DATEPART(weekday, orderDate) AS day_number, 
    COUNT(orderID) AS total_orders
FROM 
    Orders
GROUP BY 
    DATENAME(weekday, orderDate), 
    DATEPART(weekday, orderDate)
ORDER BY 
    day_number ASC;

3

  • 在您的服务器上,首先通过调用来检查您的 datefirst 设置@@DATEFIRST


    – 

  • 这个答案似乎提供了与现有答案相同的解决方案?


    – 

  • @Anis 请不要滥用评论来为您的答案添加更多信息,而是编辑答案。


    –