2012-04-18 150 views
1

我希望从星期一到星期日获得订购商品的数量,但星期六添加星期六和星期日订单,因此查询结果仅显示订购日期(周一至周五)按星期几计算订单,将星期六和星期日计数添加到星期五

我有这样的SQL已经显示订单一周的每一天:

select DATENAME(weekday,orderdate) Day,CONVERT(VARCHAR(10), orderdate, 103) orderdate, 
COUNT(orderdate) Orders 
from Orders_tb 
where orderDate >= '2012-03-01 00:00:00.000' 
and orderDate <= '2012-03-31 00:00:00.000' 
group by datepart(day,orderDate),orderdate,DATENAME(weekday,orderdate) 

感谢您的输入!

回答

1

编辑澄清后。

用例将周末日改为周五。使用派生表来避免在需要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' 
+0

感谢尼古拉的回应,你的查询给了我我正在寻找的东西,但我希望数据按订单分组,而不是总结一周中某一天的所有订单。就像我最初的查询一样,我需要在查询中的group by子句来实现这个.....任何想法? – user851971 2012-04-18 14:23:40

+0

@ user851971那么你真正需要的是将周末的日子搬到周五吗? – 2012-04-18 14:31:15

+0

@ user851971请检查我的答案的编辑部分。 – 2012-04-18 14:40:12

相关问题