Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कॉलम और पंक्तियों को समूहीकृत करना और स्विच करना

आप इसे डायनामिक PIVOT . के साथ कर सकते हैं और ROW_NUMBER() समारोह:

DECLARE @cols AS VARCHAR(1000),
        @query  AS VARCHAR(8000)
SELECT @cols = STUFF((SELECT ',' +   QUOTENAME(Name) 
                    FROM (SELECT DISTINCT Name
                          FROM #test
                          )sub
                    ORDER BY Name
                    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)') 
                    ,1,1,'')
PRINT @cols

SET @query = '
WITH cte AS (SELECT DISTINCT *
             FROM  #test)
    ,cte2 AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Apt)RowRank
             FROM  cte)
SELECT * 
FROM  cte2 
PIVOT (max(Apt) for Name in ('[email protected]+')) p
            '
EXEC (@query)

SQL Fiddle - विशिष्ट सूची, विशिष्ट क्रम

संपादित करें:यदि आप नहीं चाहते कि सूची अलग हो, तो ऊपर दिए गए पहले सीटीई को समाप्त करें, और यदि आप मनमाने ढंग से आदेश देना चाहते हैं तो ORDER BY बदलें करने के लिए (SELECT 1) :

DECLARE @cols AS VARCHAR(1000),
        @query  AS VARCHAR(8000)
SELECT @cols = STUFF((SELECT ',' +   QUOTENAME(Name) 
                    FROM (SELECT DISTINCT Name
                          FROM #test
                          )sub
                          ORDER BY Name
                    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)') 
                    ,1,1,'')
PRINT @cols

SET @query = '
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Name ORDER BY (SELECT 1))RowRank
             FROM  #test)
SELECT * 
FROM  cte 
PIVOT (max(Apt) for Name in ('[email protected]+')) p
            '
EXEC (@query)

SQL Fiddle - पूरी सूची, मनमाना क्रम

और अंत में, यदि आप RowRank . नहीं चाहते थे अपने परिणामों में फ़ील्ड, बस @cols . का पुन:उपयोग करें आपके SELECT . में वेरिएबल :

SET @query = '
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Name ORDER BY (SELECT 1))RowRank
             FROM  #test)
SELECT '[email protected]+' 
FROM  cte 
PIVOT (max(Apt) for Name in ('[email protected]+')) p
            '
EXEC (@query)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर सिमेंटिक सर्च के साथ विंडोज फाइल सिस्टम पर दस्तावेजों का भंडारण और विश्लेषण - भाग 2

  2. Sql सर्वर नियतात्मक उपयोगकर्ता-परिभाषित फ़ंक्शन

  3. SELECT INTO . में ORDER BY संरक्षित करना

  4. DATETIME द्वारा दिए गए सप्ताह के भीतर निश्चित कार्यदिवस प्राप्त करें

  5. SQL सर्वर क्वेरी में रिटर्निंग मंथ का नाम