Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Konversikan baris ke kolom dalam SQL

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);

Demo Fiddle SQL Dinamis




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah Menghubungkan ke server sql Login gagal. Login berasal dari domain yang tidak tepercaya dan tidak dapat digunakan dengan autentikasi Windows

  2. Operator XOR T-SQL

  3. Bagaimana cara mengecilkan Database SQL Server saya?

  4. Memahami Pernyataan DROP TABLE di SQL Server

  5. LEFT() vs SUBSTRING() di SQL Server:Apa Bedanya?