Esempio
La clausola PIVOT può essere utilizzata in SQL Server (Transact-SQL).
Diamo un’occhiata a un esempio. Se disponessimo di una tabella dei dipendenti che conteneva i seguenti dati:
dipendente_number | last_name | first_name | stipendio | dept_id |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Gates | Steve | 65000 | 30 |
E abbiamo eseguito la seguente istruzione SQL che crea una tabulazione incrociata su query utilizzando la clausola PIVOT:
restituirà il seguente risultato:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
Questo esempio creerebbe una tabella pivot per visualizzare lo stipendio totale per dept_id 30 e dept_id 45. I risultati vengono visualizzati in una riga con i due reparti visualizzati ciascuno nella propria colonna.
Ora, suddividiamo la clausola PIVOT e spieghiamo come ha funzionato.
Specifica le colonne nei risultati della tabulazione incrociata
Innanzitutto, vogliamo specificare quali campi includere nei risultati della tabulazione incrociata. In questo esempio, vogliamo includere il valore letterale “TotalSalary” come prima colonna nella tabella pivot. E vogliamo creare una colonna per dept_id 30 e una seconda colonna per dept_id 45. Questo ci dà 3 colonne nella nostra tabella pivot.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Specifica l’origine Dati tabella
Successivamente, dobbiamo specificare un’istruzione SELECT che restituirà i dati di origine per la tabella pivot.
In questo esempio, vogliamo restituire i valori dept_id e salary da la tabella dei dipendenti:
(SELECT dept_id, salary FROM employees) AS SourceTable
Devi specificare un alias per la query di origine. In questo esempio, abbiamo alias la query come SourceTable.
Specifica la funzione di aggregazione
Successivamente, dobbiamo specificare quale funzione di aggregazione utilizzare durante la creazione della nostra query a campi incrociati. Puoi utilizzare qualsiasi aggregato come le funzioni SUM, COUNT, MIN, MAX o AVG.
In questo esempio, utilizzeremo la funzione SUM. Questo sommerà i valori di stipendio:
PIVOT(SUM(salary)
Specifica i valori pivot
Infine, dobbiamo specificare quali valori pivot includere nei nostri risultati . Questi verranno utilizzati come intestazioni di colonna nella nostra query di tabulazione incrociata.
In questo esempio, restituiremo solo i valori dept_id di 30 e 45. Questi valori diventeranno le nostre intestazioni di colonna nel nostro pivot tavolo. Inoltre, tieni presente che questi valori sono un elenco finito dei valori dept_id e non conterranno necessariamente tutti i valori possibili.
FOR dept_id IN (, )
Ora, quando mettiamo tutto insieme, otteniamo la seguente tabella pivot:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |