समान प्रश्न हैं यहां ,यहां स्टैकओवरफ्लो में उत्तर दिया गया।
आपको ऑपरेटर का उपयोग करने की आवश्यकता है PIVOT इसे प्राप्त करने के लिए आपकी क्वेरी में। यहां उदाहरण और स्पष्टीकरण दिया गया है कि आप इसे कैसे कर सकते हैं। उदाहरण यह स्रोत।
---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ( '+ @cols +' ))
AS pvt;'
EXECUTE(@query)
स्पष्टीकरण
1.क्वेरी का पहला भाग
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
अनुसरण के रूप में आपको एक ही पंक्ति में आपके नाम कॉलम मानों का एक अच्छा चपटा परिणाम देता है
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
आप STUFF और XML PATH के बारे में अधिक जान सकते हैं यहां और यहां .
2.SELECT + @cols + FROM
अंतिम परिणाम सेट के लिए कॉलम नामों के रूप में सभी पंक्तियों का चयन करेगा (निजी - चरण 3)
यानी
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3. यह क्वेरी क्रॉस-टैब परिणाम बनाने के लिए आवश्यक डेटा की सभी पंक्तियों को खींचती है। क्वेरी के बाद (पी) परिणामों की एक अस्थायी तालिका बना रहा है जिसका उपयोग चरण 1 के लिए क्वेरी को संतुष्ट करने के लिए किया जा सकता है।
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4. धुरी अभिव्यक्ति
PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt
वास्तविक सारांश करता है और परिणामों को एक अस्थायी तालिका में रखता है जिसे pvt कहा जाता है
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76