Anda dapat menggunakan CTE (Common Table Expression) yang dipasangkan dengan NTILE
fungsi windowing - ini akan mengiris data Anda menjadi irisan sebanyak yang Anda butuhkan, mis. dalam kasus Anda, menjadi 20 irisan (masing-masing 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
Ini pada dasarnya mengelompokkan data Anda berdasarkan Category,Name
, dipesan oleh sesuatu yang lain (tidak yakin apakah COUNT(Name)
benar-benar hal yang Anda inginkan di sini), dan kemudian mengirisnya menjadi 20 bagian, masing-masing mewakili 5% dari partisi data Anda. Irisan dengan NTile = 1
adalah potongan 5% teratas - abaikan saja saat memilih dari CTE.
Lihat:
- dokumen MSDN di NTILE
- Fungsi peringkat SQL Server 2005
- SQL SERVER – 2005 – Contoh Contoh Fungsi RANKING – ROW_NUMBER, RANK, DENSE_RANK, NTILE
untuk info lebih lanjut