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

Memahami fungsi PIVOT di T-SQL

Sebuah PIVOT digunakan untuk memutar data dari satu kolom menjadi beberapa kolom.

Untuk contoh Anda di sini adalah Pivot STATIS yang berarti Anda membuat kode keras kolom yang ingin Anda putar:

create table temp
(
  id int,
  teamid int,
  userid int,
  elementid int,
  phaseid int,
  effort decimal(10, 5)
)

insert into temp values (1,1,1,3,5,6.74)
insert into temp values (2,1,1,3,6,8.25)
insert into temp values (3,1,1,4,1,2.23)
insert into temp values (4,1,1,4,5,6.8)
insert into temp values (5,1,1,4,6,1.5)

select elementid
  , [1] as phaseid1
  , [5] as phaseid5
  , [6] as phaseid6
from
(
  select elementid, phaseid, effort
  from temp
) x
pivot
(
  max(effort)
  for phaseid in([1], [5], [6])
)p

Berikut adalah Demo SQL dengan versi yang berfungsi.

Ini juga dapat dilakukan melalui PIVOT dinamis di mana Anda membuat daftar kolom secara dinamis dan melakukan PIVOT.

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.phaseid) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT elementid, ' + @cols + ' from 
            (
                select elementid, phaseid, effort
                from temp
           ) x
            pivot 
            (
                 max(effort)
                for phaseid in (' + @cols + ')
            ) p '


execute(@query)

Hasil untuk keduanya:

ELEMENTID   PHASEID1    PHASEID5    PHASEID6
3           Null        6.74        8.25
4           2.23        6.8         1.5


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghasilkan nomor acak untuk setiap baris dalam pemilihan T-SQL?

  2. Perlu kolom datetime di SQL Server yang diperbarui secara otomatis saat catatan diubah

  3. Gunakan CRYPT_GEN_RANDOM() untuk Membuat Kriptografi, Angka Acak di SQL Server

  4. Buat UDF Terikat Skema di SQL Server

  5. Hapus Identitas dari kolom dalam tabel