Как суммировать общее количество строк? - PullRequest
1 голос
/ 26 июня 2019

Я использую следующий запрос, мне нужно показать общее количество, но выдает ошибку вроде

Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос.

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 Ответ

4 голосов
/ 26 июня 2019

Как следует из сообщения об ошибке, вы не можете использовать агрегатную функцию внутри другой агрегатной функции.

Для вашего запроса, чтобы достичь суммы OrderRecordId, когда RequestStatusKey IN (1,2), вы можете использовать SUM без использования COUNT, например:

SUM(CASE WHEN RequestStatusKey IN (1,2) THEN 1 ELSE 0 END) AS GrandTotal

Однако, как предположил Тим, поскольку вы уже использовали RequestStatusKey IN (1,2) в своем предложении WHERE, вам не нужно использовать условное SUM. Просто используйте COUNT без условий:

COUNT(OrderRecordId) AS GrandTotal

UPDATE:

Поскольку вы хотите показать сумму всех строк в одном и том же результате, вы можете использовать ROLLUP для этого:

SELECT  
      ISNULL(OQ.GroupID,'Grand Total') GroupName,
      CONVERT(VARCHAR, COUNT(OrderRecordID)) TotalRecord
FROM tblDesk OQ                     
WHERE OQ.RequestStatusKey IN ( 1, 2 ) 
      AND OQ.GroupID IS NOT NULL                                        
GROUP BY ROLLUP (OQ.GroupID)
ORDER BY OQ.GroupID

См. Это SQLFiddle .

...