如何总结所有行的总数?

时间:2019-06-26 05:25:29

标签: sql sql-server aggregate-functions

我正在使用以下查询,我需要显示总计总数,但它会引发错误,例如

  

无法对包含聚合或子查询的表达式执行聚合功能。

SELECT  
      ISNULL(OQ.GroupID,'') GroupName,
      CONVERT(VARCHAR, ISNULL(COUNT(CASE WHEN RequestStatusKey IN ( 1, 2 ) THEN OrderRecordID END), 0)) TotalRecord,
      SUM(COUNT(CASE WHEN RequestStatusKey IN ( 1, 2 ) THEN OrderRecordID END)) AS GrandTotal
FROM dbo.tblDesk OQ                     
WHERE OQ.RequestStatusKey IN ( 1, 2 ) 
      AND OQ.OrderTypeKey <> 1 
      AND OQ.GroupID IS NOT NULL                                        
GROUP BY OQ.GroupID
ORDER BY OQ.GroupID 

enter image description here

我只需要总计。

1 个答案:

答案 0 :(得分:4)

如错误消息所提示,您不能在另一个聚合函数中使用聚合函数。

为了使查询在/var/log/aws-kinesis-agent/aws-kinesis-agent.log时达到OrderRecordId的总和,您可以使用RequestStatusKey IN (1,2)而不使用SUM,如下所示:

COUNT

但是,正如Tim所建议的那样,由于您已经在SUM(CASE WHEN RequestStatusKey IN (1,2) THEN 1 ELSE 0 END) AS GrandTotal 子句中使用了RequestStatusKey IN (1,2),所以不需要使用条件WHERE。只需无条件使用SUM

COUNT

更新:

由于要显示同一结果中所有行的总数,因此可以使用ROLLUP

COUNT(OrderRecordId) AS GrandTotal

请参阅此SQLFiddle