Использование счета с оператором регистра (T-SQL) - PullRequest
0 голосов
/ 31 мая 2018

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

Я пытаюсь получить количество элементов (ссуд) изтаблица, основанная на определенных критериях, которые я положил в регистр.Я использую оператор case вместо простой вставки критериев в предложение WHERE, потому что я извлекаю несколько метрик с помощью одного запроса, и эти критерии применяются только к этой конкретной метрике, а не к другим.Как я могу это исправить?

SELECT COUNT(
     CASE
          WHEN (SELECT CONVERT(DATE, MAX(Dates)) FROM (VALUES (S.SchedClosingDate), (S.SchedClosingDate)) AS SchedDates (Dates)) BETWEEN '05/01/18' AND '05/31/18' THEN FD.FileName
     END
     ) AS [Scheduled to Close]
FROM FileData AS FD
JOIN Status AS S ON FD.FileDataID = S.FileDataID

Примечание. Я удалил другие метрики из запроса для удобства чтения.

1 Ответ

0 голосов
/ 31 мая 2018

Переместите вычисление в предложение FROM, используя APPLY:

SELECT SUM(CASE WHEN v.dte >= '2018-05-01' AND v.dte < '2018-06-01' AND
                     FD.FileName IS NOT NULL
                THEN 1 ELSE 0 END
           END) AS [Scheduled to Close]
FROM FileData FD JOIN
     Status S
     ON FD.FileDataID = S.FileDataID CROSS APPLY
     (SELECT MAX(dte)
      FROM (VALUES (S.SchedClosingDate), (S.SchedClosingDate)) SchedDates(dte)
     ) as v(dte);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...