您可以将CTE(公用表表达式)与NTILE
开窗功能配对使用-这会将您的数据切成所需的任意数量的切片,例如在您的情况下,分成20个切片(每个5%)。
;WITH SlicedData AS
(
SELECT Category, Name, COUNT(Name) Total,
NTILE(20) OVER(PARTITION BY Category ORDER BY COUNT(Name) DESC) AS 'NTile'
FROM #TEMP
GROUP BY Category, Name
)
SELECT *
FROM SlicedData
WHERE NTile > 1
基本上Category,Name
,这将您的数据按照进行分组COUNT(Name)
,再按其他顺序(不确定是否确实是您想要的东西)进行分组,然后将其切成20个片段,每个片段代表您数据分区的5%。具有的切片NTile = 1
是前5%的切片-从CTE中进行选择时,只需忽略该切片即可。