按星期几计算订单,加上星期六和星期六。星期天算到星期五

时间:2012-04-18 11:31:57

标签: tsql date

我想从星期一到星期日得到订购商品的数量,但是将星期六和星期日订单添加到星期五,所以查询结果只会显示订单(星期一到星期五)

我已经有了这个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 个答案:

答案 0 :(得分: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

您可以仅使用案例陈述计算匹配日期:

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'