如何查找属于周末和工作日的项目数

问题描述 投票:0回答:1

我在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 - 计数。因为它将成为一个巨大的查询的一部分,将它作为一个子查询是好的。

sql sql-server
1个回答
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做同样的事情

© www.soinside.com 2019 - 2024. All rights reserved.