Anda dapat menggunakan PIVOT
operator tabel untuk mengubah baris nilai mata kuliah ini menjadi kolom, seperti:
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;
Demo Fiddle SQL
Ini akan memberi Anda:
COURSE GRADE 1 GRADE 2 GRADE 3 GRADE 4
A 15 17 (null) (null)
B 12 (null) (null) (null)
C 10 18 0 9
Perhatikan bahwa: Saya menggunakan fungsi peringkat ROW_NUMBER()
dengan PARTITION BY Course
untuk membagi mereka menjadi empat kelas. Sehingga Anda dapat mengelompokkannya ke dalam empat kelompok ini.
Jika Anda membutuhkan ini secara dinamis, jika ada jumlah nilai yang tidak diketahui. Anda dapat menggunakan SQL dinamis dalam hal ini untuk menghasilkan daftar nilai secara dinamis seperti:
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);