在下面的查询中,我使用NTILE
函数按大小百分比差异对结果集进行分组。我以前从未使用过此功能,但想知道是否有一种方法可以“定义”百分位数中的百分比范围-例如,我将四分位数'4'定义为10-90%。也许这不是在此处使用的正确功能?任何帮助都会很棒。请注意,WHERE
子句中实际上还有更多材料,然后在此处列出-这仅是示例。
谢谢。
查询:
WITH NonExcessCTE (MATERIAL, SIZE_LITERAL, TOTAL_SIZE, TOTAL_MATERIAL, SIZE_PERCENT)
AS (
SELECT DISTINCT MATERIAL, SIZE_LITERAL,
SUM(QUANTITY) OVER (PARTITION BY MATERIAL, SIZE_LITERAL) AS TOTAL_SIZE,
SUM(QUANTITY) OVER (PARTITION BY MATERIAL) AS TOTAL_MATERIAL,
100.0 * SUM(QUANTITY) OVER (PARTITION BY MATERIAL, SIZE_LITERAL) /
SUM(QUANTITY) OVER (PARTITION BY MATERIAL) AS SIZE_PERCENT
FROM VW_MRP_ALLOCATION_COMBINED
WHERE REQUIREMENT_TYPE <> ''
AND STOCK_CATEGORY <> 'A60386045'
),
ExcessCTE (MATERIAL, SIZE_LITERAL, TOTAL_SIZE, TOTAL_MATERIAL, SIZE_PERCENT)
AS (
SELECT DISTINCT MATERIAL, SIZE_LITERAL,
SUM(QUANTITY) OVER (PARTITION BY MATERIAL, SIZE_LITERAL) AS TOTAL_SIZE,
SUM(QUANTITY) OVER (PARTITION BY MATERIAL) AS TOTAL_MATERIAL,
100.0 * SUM(QUANTITY) OVER (PARTITION BY MATERIAL, SIZE_LITERAL) /
SUM(QUANTITY) OVER (PARTITION BY MATERIAL) AS SIZE_PERCENT
FROM VW_MRP_ALLOCATION_COMBINED
WHERE REQUIREMENT_TYPE = ''
AND STOCK_CATEGORY <> 'A60386045'
)
SELECT E.MATERIAL,
E.SIZE_LITERAL,
E.TOTAL_SIZE,
ROUND(E.SIZE_PERCENT,0) AS 'EXCESS_SIZE_PERCENT',
ROUND(N.SIZE_PERCENT,0) AS 'NON_EXCESS_SIZE_PERCENT',
ROUND(ABS(E.SIZE_PERCENT - N.SIZE_PERCENT),0) AS 'DIFFERENCE',
NTILE(4) OVER(ORDER BY ROUND(ABS(E.SIZE_PERCENT - N.SIZE_PERCENT),0)) AS 'QUARTILE'
FROM NonExcessCTE N JOIN ExcessCTE E ON N.MATERIAL = E.MATERIAL AND N.SIZE_LITERAL = E.SIZE_LITERAL
WHERE N.MATERIAL IN ('EE4726',
'EE4726',
'EE4727')
ORDER BY ROUND(ABS(E.SIZE_PERCENT - N.SIZE_PERCENT),0) DESC