sql >> Databasteknik >  >> RDS >> Sqlserver

Förstå PIVOT-funktionen i T-SQL

En PIVOT används för att rotera data från en kolumn till flera kolumner.

För ditt exempel här är en STATIC Pivot vilket betyder att du hårdkodar de kolumner som du vill rotera:

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

Här är en SQL-demo med en fungerande version.

Detta kan också göras genom en dynamisk PIVOT där du skapar listan med kolumner dynamiskt och utför 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)

Resultaten för båda:

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


  1. Hur man återställer/ändrar MySql root-lösenord på kommandoraden i ubuntu linux

  2. Skapa och ta bort en PostgreSQL-databas på Ubuntu 16.04

  3. Uppdatera en tabell med JOIN i SQL Server?

  4. Hur man konfigurerar Source-Replica Replication i MySQL