Я пытаюсь рассчитать процентную долю товара на уровне размера целого, сначала получив общее количество на уровне размера в одном CTE, а затем создав другой CTE, чтобы получить общее количество только на уровне товара. В приведенном ниже коде, кажется, работает, но это также довольно долго и требует времени для запуска.
Мне любопытно, есть ли более эффективный способ, возможно, использующий OVER
или другую оконную функцию для получения того же результата. Я использовал OVER
раньше, но так как они на разных уровнях детализации, я не совсем уверен.
SQL:
WITH SumByMaterialCTE (MATERIAL, QUANTITY) --used to get the sum of quantity of an article for all demand
AS (SELECT MATERIAL, SUM(QUANTITY)
FROM VW_MRP_ALLOCATION_COMBINED
WHERE REQUIREMENT_TYPE <> ''
GROUP BY MATERIAL),
DemandSizeLevelCTE (MATERIAL, SIZE_LITERAL, SIZE_PERCENT) --used to get a percentage for each size of an article over the total demand
AS (SELECT DS.MATERIAL,
DS.SIZE_LITERAL,
(SUM(DS.QUANTITY)/SM.QUANTITY) AS 'SIZE_PERCENT'
FROM VW_MRP_ALLOCATION_COMBINED DS
JOIN SumByMaterialCTE SM ON DS.MATERIAL = SM.MATERIAL
WHERE DS.REQUIREMENT_TYPE <> ''
GROUP BY DS.MATERIAL, DS.SIZE_LITERAL, SM.QUANTITY)
SELECT DS.MATERIAL,
DS.SIZE_LITERAL,
DS.SIZE_PERCENT
FROM DemandSizeLevelCTE DS