Выполнение агрегатных функций по сложному запросу - PullRequest
0 голосов
/ 02 июля 2019

У меня есть запрос, который я пытаюсь преобразовать из оракула в SSMS. Я уверен, что большинство из вас знает, что SSMS не разрешает агрегаты в подзапросах, поэтому это создает проблему. Я ни в коем случае не эксперт по SQL, но я видел людей, которые пытались разделить его и написать агрегат позже в запросе. Предоставленный фрагмент - это только один из примерно 20 или более столбцов, настроенных одинаково. Итак, я не знаю, где я смогу разместить свои суммы и функции округления.

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

 SELECT
    ROUND(SUM(ISNULL([COLUMN_A1] - [COLUMN_A2],0)
    /(CASE WHEN [COLUMN_B1] = 400
    THEN 1
          ELSE ISNULL((SELECT [COLUMN_C1] FROM [TABLE_C] WHERE [COLUMN_C2] = 
    ISNULL([COLUMN_A3], [COLUMN_A4]) AND [COLUMN_C3] = [COLUMN_D1] AND [COLUMN_C4]= 400),
                   (SELECT [COLUMN_C1] FROM [TABLE_C] WHERE [COLUMN_C3] = [COLUMN_D1] AND [COLUMN_C4] =
                           400 AND [COLUMN_C2] =
                                   (SELECT MAX([COLUMN_C2]) FROM [TABLE_C] WHERE [COLUMN_C3] = [COLUMN_D1] AND [COLUMN_C4] = 400 AND [COLUMN_C2] <= ISNULL([COLUMN_A3],[COLUMN_A4])))) END)),2) AS [COMPLICATED_QUERY_COLUMN],


                                   FROM [TABLE_D]
INNER JOIN [TABLE_A] ON [COLUMN_A] = [COLUMN_D]
LEFT OUTER JOIN [TABLE_E] ON [COLUMN_E] = [COLUMN_A]
LEFT OUTER JOIN [TABLE_F] ON [COLUMN_F] = [COLUMN_E]
WHERE 1 = 1
AND [COLUMN_D2] = 1
GROUP BY [COLUMN_D],[COLUMN_D3]
HAVING SUM ([COLUMN_A5]-[COLUMN_A2])<>0

это динамическое представление, поэтому вывод постоянно меняется. Это просто должна быть сумма подзапроса, округленная до 2 десятичных знаков для результата типа валюты.

...