我正在使用以下查询,我需要显示总计总数,但它会引发错误,例如
无法对包含聚合或子查询的表达式执行聚合功能。
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
我只需要总计。
答案 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。