我正在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-计数。由于它将成为大型查询的一部分,因此可以将它作为子查询。
答案 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
的作用相同