有没有一种方法可以在SQL Server中定义NTILE范围?

时间:2020-03-01 05:53:10

标签: sql sql-server percentile

在下面的查询中,我使用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

0 个答案:

没有答案