如何查找周末和工作日的物品计数

时间:2019-02-26 22:31:53

标签: sql sql-server

我正在sql server中工作。我必须创建一个报告,列出每个人下周一至周五的订单数量。到目前为止,我有以下查询,并且可以产生所需的结果。

select 
(select sum(case when DATEPART(DW, o.Order_DateTime) not between 2 and 6  
            then 1 else 0
       end)  
 from Order_Data o 
 where o.email_address = @email) as WeekEndOrders,
 (select sum(case when DATEPART(DW, o.Order_DateTime) between 2 and 6  
            then 1 else 0
       end)  
 from Order_Data o 
 where o.email_address = @email) as WeekDayOrders

我想要第一个子查询来检查DW是1还是7,这将对应于周末-周日和周六。由于我不知道该怎么做,因此使用“不在2到6之间”。还有一种以更好的方式编写此查询的想法。例如,将这两个重复的子查询合并为一个,仍然产生两个-WeekEndOrders和WeekDayOrders-计数。由于它将成为大型查询的一部分,因此可以将它作为子查询。

1 个答案:

答案 0 :(得分:1)

以这种方式尝试。

 select 
   sum(iif(DATEPART(DW, o.Order_DateTime) in (1, 7), 1, 0)  WeekEndOrders,
   sum(iif(DATEPART(DW, o.Order_DateTime) not in (1, 7), 1, 0)  WeekDayOrders
 from Order_Data o 
 where o.email_address = @email

PS:IIF (condition, true_part, false_part)case when <condition> then <true_part> else <false_part> end的作用相同