У меня есть запрос, который я пытаюсь преобразовать из оракула в 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 десятичных знаков для результата типа валюты.