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

Konversi Baris ke kolom menggunakan 'Pivot' di SQL Server

Jika Anda menggunakan SQL Server 2005+, maka Anda dapat menggunakan PIVOT berfungsi untuk mengubah data dari baris menjadi kolom.

Sepertinya Anda perlu menggunakan sql dinamis jika minggu tidak diketahui tetapi lebih mudah untuk melihat kode yang benar menggunakan versi hard-code pada awalnya.

Pertama, berikut adalah beberapa definisi tabel cepat dan data untuk digunakan:

CREATE TABLE yt 
(
  [Store] int, 
  [Week] int, 
  [xCount] int
);
    
INSERT INTO yt
(
  [Store], 
  [Week], [xCount]
)
VALUES
    (102, 1, 96),
    (101, 1, 138),
    (105, 1, 37),
    (109, 1, 59),
    (101, 2, 282),
    (102, 2, 212),
    (105, 2, 78),
    (109, 2, 97),
    (105, 3, 60),
    (102, 3, 123),
    (101, 3, 220),
    (109, 3, 87);

Jika nilai Anda diketahui, Anda akan membuat hard-code kueri:

select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

Lihat Demo SQL

Kemudian jika Anda perlu membuat nomor minggu secara dinamis, kode Anda akan menjadi:

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

select @cols = STUFF((SELECT ',' + QUOTENAME(Week) 
                    from yt
                    group by Week
                    order by Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT store,' + @cols + ' from 
             (
                select store, week, xCount
                from yt
            ) x
            pivot 
            (
                sum(xCount)
                for week in (' + @cols + ')
            ) p '

execute(@query);

Lihat Demo SQL.

Versi dinamis, menghasilkan daftar week angka yang harus diubah menjadi kolom. Keduanya memberikan hasil yang sama:

| STORE |   1 |   2 |   3 |
---------------------------
|   101 | 138 | 282 | 220 |
|   102 |  96 | 212 | 123 |
|   105 |  37 |  78 |  60 |
|   109 |  59 |  97 |  87 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Urutan eksekusi klausa Group By, Have, dan Where di SQL Server?

  2. Apakah ada cara untuk menyematkan laporan dan dasbor bi daya di aplikasi desktop vb.net atau C# dengan database sql server 2008?

  3. LOG() Contoh di SQL Server

  4. Memperkenalkan Fitur Baru - Analisis Deadlock

  5. Berapa kali karakter tertentu muncul dalam string