Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разбиране на функцията PIVOT в T-SQL

A PIVOT използва се за завъртане на данните от една колона в множество колони.

За вашия пример тук е STATIC Pivot, което означава, че кодирате строго колоните, които искате да завъртите:

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

Ето SQL демонстрация с работеща версия.

Това може да стане и чрез динамичен PIVOT, където вие създавате динамично списъка с колони и изпълнявате 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)

Резултатите и за двете:

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. Как да свържете база данни на Access към SQL Server в Access 2016

  2. SQL Server ЗА JSON AUTO Примери (T-SQL)

  3. Как да промените формата на текущата дата в SQL Server (T-SQL)

  4. SQL Server:трябва ли да използвам таблици information_schema над sys таблици?

  5. Как да избягвате низове в SQL Server с помощта на PHP?