Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zrozumienie funkcji PIVOT w T-SQL

PIVOT służy do obracania danych z jednej kolumny do wielu kolumn.

Na przykład tutaj jest STATIC Pivot, co oznacza, że ​​kodujesz na stałe kolumny, które chcesz obrócić:

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

Oto demonstracja SQL z działającą wersją.

Można to również zrobić za pomocą dynamicznego PIVOT, w którym dynamicznie tworzysz listę kolumn i wykonujesz 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)

Wyniki dla obu:

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. Tymczasowo wyłącz wszystkie ograniczenia klucza obcego

  2. Korzystanie z DMV ( Dynamic Management View ) i DMF ( Dynamic Management Function ) | Rozwiązywanie problemów z wydajnością serwera SQL -4

  3. Jaki jest najszybszy sposób zbiorczego wstawiania dużej ilości danych w programie SQL Server (klient C#)

  4. T-SQL:Wybieranie kolumny na podstawie MAX (inna kolumna)

  5. Łączenie wartości kolumn w listę rozdzielaną przecinkami