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

SQL में पंक्तियों को कॉलम में बदलें

आप <कोड का उपयोग कर सकते हैं>पिवट टेबल ऑपरेटर इन कोर्स के ग्रेड की पंक्तियों को कॉलम में बदलने के लिए, जैसे:

SELECT  
  Course, 
  [1] AS "Grade 1", 
  [2] AS "Grade 2", 
  [3] AS "Grade 3", 
  [4] AS "Grade 4"
FROM
(
  SELECT 
    Course, 
    Grade, 
    ROW_NUMBER() OVER(PARTITION BY Course 
                      ORDER BY COURSE) rownum 
  FROM Grades
) t
PIVOT 
(
   MAX(Grade)
   FOR rownum IN([1], [2], [3], [4])
) p;

SQL Fiddle Demo

यह आपको देगा:

COURSE    GRADE 1   GRADE 2      GRADE 3     GRADE 4
  A         15        17          (null)     (null)
  B         12      (null)        (null)     (null)
  C         10        18            0           9

ध्यान दें कि: मैंने रैंकिंग फ़ंक्शन का उपयोग किया ROW_NUMBER() पाठ्यक्रम द्वारा विभाजन के साथ उन्हें चार ग्रेड में विभाजित करने के लिए। ताकि आप उन्हें इन चार समूहों में समूहित कर सकें।

यदि आपको इसकी गतिशील रूप से आवश्यकता है, तो अज्ञात संख्या में ग्रेड होने की स्थिति में। इस मामले में गतिशील रूप से ग्रेड की सूची तैयार करने के लिए आप गतिशील एसक्यूएल का उपयोग कर सकते हैं:

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT distinct ',' 
                        + QUOTENAME('Grade ' 
                        + CAST(ROW_NUMBER() OVER(PARTITION BY Course 
                                               ORDER BY Course) AS VARCHAR(10)))
                FROM Grades
                         FOR XML PATH(''), TYPE
                      ).value('.', 'NVARCHAR(MAX)'), 1, 1, '');

SELECT @query = 'SELECT Course, ' + @cols +  
                'FROM
                 (
                   SELECT 
                     Course, 
                     Grade, 
                     ''Grade '' + CAST(ROW_NUMBER() 
                                       OVER(PARTITION BY Course 
                                ORDER BY COURSE) AS VARCHAR(10)) rownum 
                   FROM Grades
                 ) t
                 PIVOT 
                 (
                   MAX(Grade)
                   FOR rownum IN(' + @cols + ')' +
                ') p';
execute(@query);

डायनामिक SQL Fiddle डेमो




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आशावादी संगामिति:IsConcurrencyToken और RowVersion

  2. एक एसक्यूएल चर के लिए निष्पादन परिणाम कैसे असाइन करें?

  3. SQL सर्वर में प्राथमिक कुंजी कैसे बनाएं (T-SQL उदाहरण)

  4. SQL सर्वर प्रबंधन स्टूडियो में तालिका में मानों को त्वरित रूप से कैसे संपादित करें?

  5. एसएसआरएस - Group_Concat एक अभिव्यक्ति का उपयोग कर समतुल्य?