Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何查找属于周末和工作日的项目计数_Sql_Sql Server - Fatal编程技术网

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

Sql 如何查找属于周末和工作日的项目计数,sql,sql-server,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 WeekE

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

尝试这样做

 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

注:
IIF(条件,真部分,假部分)
case做同样的事情,当else结束时

你可以在(1,7)中写1或7作为
。此外,您可以在一个select中重写整个查询,而不是在两个子查询中重写,除非我遗漏了什么。where子句和您从中选择的表是相同的,所以我看不出有什么理由不这样做:
select weekendorders=sum(case when datepart(…)in(1,7),然后1 else 0 end),weekdayorders=sum(…)from order_data where email_address=@email