编辑澄清后。
用例将周末日改为周五。使用派生表来避免在需要orderdate的任何地方复制相同的表达式。
select DATENAME(weekday,orderdate_trimmed) Day,
CONVERT(VARCHAR(10), orderdate_trimmed, 103) orderdate,
COUNT(orderdate_trimmed) Orders
from
(
select *,
order_date -
case DATENAME(weekday,orderdate)
when 'Saturday' then 1
when 'Sunday' then 2
else 0
end
orderdate_trimmed
from Orders_tb
) a
where orderDate >= '2012-03-01 00:00:00.000'
and orderDate <= '2012-03-31 00:00:00.000'
group by orderdate_trimmed
你可能指望只用case语句匹配天:
select COUNT(orderdate) TotalOrders,
COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Monday' then 1 end) Monday,
COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Tuesday' then 1 end) Tuesday,
COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Wednesday' then 1 end) Wednesday,
COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Thursday' then 1 end) Thursday,
COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Friday'
OR DATENAME(weekday,orderdate) = 'Saturday'
OR DATENAME(weekday,orderdate) = 'Sunday'
THEN 1 end) Friday
from Orders_tb
where orderDate >= '2012-03-01 00:00:00.000'
and orderDate <= '2012-03-31 00:00:00.000'
日期时警告:作为一个日期包含时间部分,这将是明智的比较是这样的:
where orderDate >= '2012-03-01 00:00:00.000'
and orderDate < '2012-04-01 00:00:00.000'
感谢尼古拉的回应,你的查询给了我我正在寻找的东西,但我希望数据按订单分组,而不是总结一周中某一天的所有订单。就像我最初的查询一样,我需要在查询中的group by子句来实现这个.....任何想法? – user851971 2012-04-18 14:23:40
@ user851971那么你真正需要的是将周末的日子搬到周五吗? – 2012-04-18 14:31:15
@ user851971请检查我的答案的编辑部分。 – 2012-04-18 14:40:12