Utilizzo di PIVOT in server SQL
SQL Server utilizza una semplice funzione PIVOT in uno scenario di tipo reale, in cui il numero di colonne è sempre noto.
Autore
Nell'ultimo articolo ho scritto sull'utilizzo di UNPIVOT, questa è la funzione opposta PIVOT, dove trasformerà le righe in colonne, ho usato alcuni dati che potrebbero non essere necessariamente un esempio del mondo reale, ma ci daranno abbastanza opzioni per giocare insieme a.
Dummy data
MyRow | MyCol | CalcCol |
1 | 1 | 1 |
1 | 3 | 1 |
1 | s | 1 |
2 | 2 | 1 |
2 | 2 | 6 |
2 | 3 | 1 |
3 | 2 | 1 |
3 | 3 | 1 |
3 | 3 | 3 |
3 | 5 | 5 |
Autore
La prima cosa da fare è creare questo set di dati fittizio, quindi possiamo farlo usando il codice seguente.
Creeremo anche un tipo di tabella (questi possono migliorare le prestazioni delle tabelle temporanee).
SQL
CREATE TYPE c1bs_Piv AS TABLE(MyRow NVARCHAR(10),--Row IDMyCol NVARCHAR(10),--Value to become columnCalcCol INT--Value to be Summed)GODECLARE @Piv c1bs_PivINSERT INTO @PivSELECT '1','1',1 UNIONSELECT '1','s',1 UNIONSELECT '1','3',1 UNIONSELECT '2','2',6 UNIONSELECT '2','2',1 UNIONSELECT '2','3',1 UNIONSELECT '3','5',5 UNIONSELECT '3','2',1 UNIONSELECT '3','3',1 UNIONSELECT '3','3',3
Autore
Per ruotare i dati, vorremo scrivere il seguente codice SQL.
SELECT *FROM @PivPIVOT (SUM(CalcCol)FOR MyColIN ([1],[2],[3])) AS MyTable
Autore
E questo restituirà il seguente set di dati. Nota che dove abbiamo aggiunto le colonne "5" e "s" sopra, verrebbero saltate con questo e nel prossimo articolo ci assicureremo di catturarlo.
MyRow | 1 | 2 | 3 |
1 | 1 | NULL | 1 |
2 | NULL | 7 | 1 |
3 | NULL | 1 | 4 |