आप NTILE
. के साथ युग्मित CTE (कॉमन टेबल एक्सप्रेशन) का उपयोग कर सकते हैं विंडोिंग फ़ंक्शन - यह आपके डेटा को आपकी आवश्यकता के अनुसार कई स्लाइस में काट देगा, उदा। आपके मामले में, 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% टुकड़ा है - सीटीई से चयन करते समय इसे अनदेखा करें।
देखें:
- NTILE पर MSDN डॉक्स
- एसक्यूएल सर्वर 2005 रैंकिंग कार्य करता है
- एसक्यूएल सर्वर - 2005 - रैंकिंग कार्यों का नमूना उदाहरण - ROW_NUMBER, RANK, DENSE_RANK, NTILE
अधिक जानकारी के लिए