Comprensione della funzione PIVOT in T-SQL

Sono molto nuovo di SQL.

Ho una tabella come questa:

ID | TeamID | UserID | ElementID | PhaseID | Effort ----------------------------------------------------- 1 | 1 | 1 | 3 | 5 | 6.74 2 | 1 | 1 | 3 | 6 | 8.25 3 | 1 | 1 | 4 | 1 | 2.23 4 | 1 | 1 | 4 | 5 | 6.8 5 | 1 | 1 | 4 | 6 | 1.5 

E mi è stato detto di ottenere dati come questo

 ElementID | PhaseID1 | PhaseID5 | PhaseID6 -------------------------------------------- 3 | NULL | 6.74 | 8.25 4 | 2.23 | 6.8 | 1.5 

Capisco che ho bisogno di usare la funzione PIVOT. Ma non riesco a capirlo chiaramente. Sarebbe di grande aiuto se qualcuno potesse spiegarlo nel caso di cui sopra (o eventuali alternative)

Un PIVOT utilizzato per ruotare i dati da una colonna in più colonne.

Per il tuo esempio qui c’è un pivot STATICO che significa che codifica in modo rigido le colonne che vuoi ruotare:

 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 

Ecco una demo SQL con una versione funzionante.

Questo può essere fatto anche attraverso un PIVOT dinamico in cui si crea dynamicmente l’elenco di colonne ed si esegue il 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) 

I risultati per entrambi:

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

Questi sono gli esempi di base che gentilmente passano attraverso questo.

SQL SERVER – Esempi di tabelle PIVOT e UNPIVOT

Esempio dal link sopra per la tabella del prodotto:

 SELECT PRODUCT, FRED, KATE FROM ( SELECT CUST, PRODUCT, QTY FROM Product) up PIVOT (SUM(QTY) FOR CUST IN (FRED, KATE)) AS pvt ORDER BY PRODUCT 

rende:

  PRODUCT FRED KATE -------------------- BEER 24 12 MILK 3 1 SODA NULL 6 VEG NULL 5 

Esempi simili possono essere trovati nel post del blog tabelle pivot in SQL Server. Un semplice esempio

Per impostare l’errore di compatibilità

usalo prima di usare la funzione pivot

 ALTER DATABASE [dbname] SET COMPATIBILITY_LEVEL = 100 

Ero nuovo a questo e creo un bel post su di esso … Il mio problema era capire come applicare correttamente l’aggregazione e qui è il mio post: http://jaider.net/posts/1176-pivot-in-sql-server -correct–risultati aggregati /

Nella soluzione di @bluefeet, è importante ricordare che elementid è la colonna chiave del gruppo “invisibile” Group By . Inoltre, è ansible sostituire elementid o aggiungere più colonne come userid .

inserisci la descrizione dell'immagine qui

  SELECT , [first pivoted column] AS , [second pivoted column] AS , ... [last pivoted column] AS  FROM (