Преобразование Oracle Query в SQL Server - ошибка 130 - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть запрос:

select u1.LastName, u1.FirstName,
    sum(case when not exists(select 1
                     from CaseHistory ch2
                     where ch1.caseid = ch2.caseid
                     and ch2.ActiveDate = somedate
                     ch2.ID in (0, 2, 41))
then 1
else 0
end) as WorkedRecord
from sometables

Этот запрос работает в Oracle, но теперь мы переходим на SQL Server. В SQL Server мы получаем следующую ошибку:

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

Вот мое решение:

В итоге я сделал линейный просмотр и затем суммировал это. Я сделал что-то вроде этого: выберите сумму (a.WorkedRecord) от (Выбрать (случай, когда не существует (выберите 1 из истории дела ch2 ... затем 1 еще 0 конец) как WorkedRecord) от Sometables)

Кажется, это работает.

1 Ответ

0 голосов
/ 19 ноября 2011

Вместо подзапроса ... не могли бы вы сделать left join в этой ситуации, а затем суммировать результаты объединения?

SELECT
    u1.LastName,
    u1.FirstName,
    SUM(CASE WHEN ch2.caseid IS NULL THEN 1 ELSE 0 END) AS WorkedRecord
FROM
    sometables s 
    LEFT JOIN CaseHistory ch2 ON
        ch2.caseid = ch1.caseid
        AND ch2.ActiveDate = somedate
        AND ch2.ID in (0, 2, 41)
GROUP BY
    ul.LastName,
    ul.FirstName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...