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