我有此代码,可以成功显示根据星期几名称显示的订单数量。但是,我想按相应排序显示日期名称。我有以下代码:
SELECT
DATENAME(dw, orderDate) AS day_of_week,
COUNT(orderID) AS total_orders
FROM
Orders
GROUP BY
DATENAME(dw, orderDate)
这是输出:但我希望按星期一、星期二、星期三等顺序排列日期(名称)。
有什么想法吗?提前谢谢您。
4
最佳答案
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 请不要滥用评论来为您的答案添加更多信息,而是编辑答案。
–
|
–
create table ... insert into table...
以便我们进行测试。–
–
–
|