Vous pouvez utiliser un CTE (Common Table Expression) associé au NTILE
fonction de fenêtrage - cela découpera vos données en autant de tranches que vous le souhaitez, par ex. dans votre cas, en 20 tranches (chacune de 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
Cela regroupe essentiellement vos données par Category,Name
, commandes par autre chose (pas sûr si COUNT(Name)
est vraiment ce que vous voulez ici), puis le découpe en 20 morceaux, chacun représentant 5 % de votre partition de données. La tranche avec NTile = 1
est la tranche supérieure de 5 % - ignorez simplement cela lors de la sélection dans le CTE.
Voir :
- Documents MSDN sur NTILE
- Fonctions de classement SQL Server 2005
- SQL SERVER – 2005 – Exemple d'exemple de fonctions RANKING – ROW_NUMBER, RANK, DENSE_RANK, NTILE
pour plus d'informations