Сумма SQL по разделу BY Рассчитать% от группы
Может кто-нибудь сказать мне, почему ниже не скомпилировать?
Я пытаюсь подсчитать, какой% транзакции с отметкой "M3" приходится на всю партию.
Я думаю, что было бы достаточно легко, если бы была только одна партия, но иногда их будет несколько.
Весь код ниже:
SELECT
[Batch],
[DocNum],
[Date],
[Time],
[Location],
[ItemCode],
[Brand],
[Quantity],
CASE
WHEN [Variance] IS NULL
THEN ''
ELSE [Variance]
END AS [Variance],
CASE
WHEN [Comments] IS NULL
THEN ''
ELSE [Comments]
END AS [Comments],
CASE
WHEN [Variance] = 'M3'
THEN(
(
(SELECT
ABS([Quantity])
FROM #BatchReport
WHERE [Variance] = 'M3')
/
(SELECT
SUM([Quantity])
FROM #BatchReport
WHERE [Quantity] > 0)
) * 100) OVER (PARTITION BY [Batch])
ELSE '0'
END AS [Pct Loss],
SUM([Quantity]) OVER (PARTITION BY [Batch]) AS [Difference],
((SUM([Quantity]) - MAX([Quantity])) * 100) / MAX([Quantity]) OVER (PARTITION BY [Batch]) AS [Pct Difference]
FROM #BatchReport
WHERE [DocNum] IS NOT NULL
GROUP BY [Batch], [DocNum], [Date], [Time], [Variance], [Brand], [Comments], [Quantity], [Location], [ItemCode]
ORDER BY [Batch], [Date], [Time]
Текст ошибки: Incorrect syntax near the keyword 'OVER'.
Ошибка исчезает, если я удаляю эту часть:
CASE
WHEN [Variance] = 'M3'
THEN(
(
(SELECT
ABS([Quantity])
FROM #BatchReport
WHERE [Variance] = 'M3')
/
(SELECT
SUM([Quantity])
FROM #BatchReport
WHERE [Quantity] > 0)
) * 100) OVER (PARTITION BY [Batch])
ELSE '0'
END AS [Pct Loss]
Пример чего-то вроде того, что я пытаюсь получить:
Спасибо!
1 ответ
Ваша логика выражения в основном непостижима. Я предполагаю, что вы хотите какое-то соотношение между значениями "M3" и общими значениями. Моя лучшая догадка:
(100.0 * SUM(CASE WHEN [Variance] = 'M3' THEN ABS([Quantity]) END) /
SUM(CASE WHEN Quantity > 0 THEN Quantity END ) OVER (PARTITION BY Batch)
) as [Pct Loss]
Тем не менее, ваш GROUP BY
это настолько сложно, что я был бы удивлен, если бы ваш запрос сделал то, что вы хотите. Я думаю, что вы должны опубликовать еще один вопрос с образцами данных и желаемых результатов.