对日期的聚合或子查询执行聚合函数

时间:2018-02-12 04:39:43

标签: sql-server tsql

我正在进行一项查询,其中我选择了本月发行的门票的门票状态计数以及上个月输入的门票状态计数,依此类推。因为它几乎像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

此致

1 个答案:

答案 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)