我在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
PS:IIF (condition, true_part, false_part)
与case when <condition> then <true_part> else <false_part> end
做同样的事情