我正在进行一项查询,其中我选择了本月发行的门票的门票状态计数以及上个月输入的门票状态计数,依此类推。因为它几乎像3个不同的where子句(导致它的三个不同的状态,我需要它们并排)。我试过这段代码。
SELECT COUNT( CASE WHEN DATEPART(MONTH,recordInputDate)=DATEPART(MONTH,DATEADD(mm,DATEDIFF(mm,0,GETDATE())-1,0))
THEN COUNT(ticketNumber)
ELSE 0
END
) AS ticketNumber
FROM TICK_ticketRecord
我的意图是这会工作,但是我得到关于子查询的错误,我不知道如何处理它,因为我无法将我想要处理的日期分配给变量。
或者,如果我可以将以下内容组合成一个查询
SELECT COUNT(ticketNumber)
FROM TICK_ticketRecord
WHERE DATEPART(MONTH,recordInputDate)=DATEPART(MONTH,DATEADD(mm,DATEDIFF(mm,0,GETDATE())-1,0))
AND tickStatus=2
SELECT COUNT(ticketNumber)
FROM TICK_ticketRecord
WHERE DATEPART(MONTH,recordInputDate)=DATEPART(MONTH,DATEADD(mm,DATEDIFF(mm,0,GETDATE())-1,0))
AND tickStatus=3
此致
答案 0 :(得分:0)
您可以在WHERE
子句中应用所需的任何过滤,以获取您想要计算的整个记录集。然后使用条件聚合有选择地计算具有不同tickStatus
值的记录:
SELECT COUNT(CASE WHEN ticketNumber = 2 THEN 1 END) AS status_2,
COUNT(CASE WHEN ticketNumber = 3 THEN 1 END) AS status_3
FROM TICK_ticketRecord
WHERE
DATEPART(MONTH,recordInputDate) = DATEPART(MONTH,
DATEADD(mm, DATEDIFF(mm,0, GETDATE())-1,0))
AND
tickStatus IN (2,3)