I database relazionali memorizzano enormi quantità di dati sotto forma di tabelle. Queste tabelle possono avere un numero qualsiasi di righe e colonne. Ma cosa succede se dovessi modificare i dati a livello di riga in dati a colonne? Bene, in questo articolo su SQL Pivot, ti mostrerò come convertire le righe in una colonna in un SQL Server.
I seguenti argomenti saranno trattati in questo articolo:
- Cos'è PIVOT in SQL?
- Sintassi
- Esempio
- Funzionamento della clausola PIVOT
- SQL UNPIVOT
Cos'è PIVOT in SQL?
PIVOT viene utilizzato per ruotare il valore della tabella convertendo i valori univoci di una singola colonna in più colonne. Viene utilizzato per ruotare le righe in valori di colonna ed esegue aggregazioni quando richiesto sui valori di colonna rimanenti.
UNPIVOT, invece, serve per eseguire le operazioni opposte. Quindi, viene utilizzato per convertire le colonne di una tabella specifica in valori di colonna.
Proseguendo in questo articolo, cerchiamo di capire la sintassi di SQL Pivot.
Sintassi:
SELECT NonPivoted ColumnName, [First Pivoted ColumnName] AS ColumnName, [Second Pivoted ColumnName] AS ColumnName, [Third Pivoted ColumnName] AS ColumnName, ... [Last Pivoted ColumnName] AS ColumnName FROM (SELECT query which produces the data) AS [alias for the initial query] PIVOT ( [AggregationFunction](ColumName) FOR [ColumnName of the column whose values will become column headers] IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName], [Third Pivoted ColumnName] ... [last pivoted column]) ) AS [alias for the Pivot Table];
Qui puoi anche usare la clausola ORDER BY per ordinare i valori in ordine crescente o decrescente. Ora che sai cos'è PIVOT in SQL e la sua sintassi di base, andiamo avanti e vediamo come usarlo.
Esempi
Per la tua migliore comprensione, prenderò in considerazione la seguente tabella per spiegarti tutti gli esempi.
Tabella dei fornitori:
SupplierID | DaysofManufacture | Costo | ID cliente | ID acquisto |
1 | 12 | 1230 | 11 | P1 |
2 | 21 | 1543 | 22 | P2 |
3 | 32 | 2345 | 11 | P3 |
4 | 14 | 8765 | 22 | P1 |
5 | 42 | 3452 | 33 | P3 |
6 | 31 | 5431 | 33 | P1 |
7 | 41 | 2342 | 11 | P2 |
8 | 54 | 3654 | 22 | P2 |
9 | 33 | 1234 | 11 | P3 |
10 | 56 | 6832 | 33 | P2 |
Scriviamo una semplice query per recuperare il costo medio speso da ciascun cliente.
SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer FROM Suppliers GROUP BY CustomerID;
Risultato:
ID cliente | AverageCostofCustomer |
11 | 1787,75 |
22 | 4654 |
33 | 5238.33 |
Ora, diciamo che vogliamo ruotare la tabella sopra. Qui, i valori della colonna CustomerID diventeranno le intestazioni delle colonne.
-- Create Pivot table with one row and three columns SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33] FROM (SELECT CustomerID, Cost FROM Suppliers) AS SourceTable PIVOT ( AVG(Cost) FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Risultato:
Costo_secondo_per_clienti | 11 | 22 | 33 |
Costo medio del cliente | 1787,75 | 4654 | 5238.33 |
Nota: Quando utilizzi funzioni di aggregazione con PIVOT, i valori nulli non vengono considerati durante il calcolo di un'aggregazione.
Beh, quello era un esempio di base, ma ora capiamo come funzionava la clausola PIVOT.
Funzionamento della clausola PIVOT
Come puoi fare riferimento sopra, per creare una TABELLA PIVOT, devi seguire i passaggi seguenti:
- Seleziona le colonne per il pivot
- Quindi, seleziona una tabella di origine.
- Applica l'operatore PIVOT, quindi utilizza le funzioni di aggregazione.
- Menziona i valori pivot.
Seleziona le colonne per il pivot
Inizialmente, dobbiamo specificare i campi da includere nei nostri risultati. Nel nostro esempio, ho considerato la colonna AverageCostofCustomer nella tabella pivot. Quindi abbiamo creato altre tre colonne con le intestazioni di colonna 11, 22 e 33. Esempio-
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]
Seleziona la tabella di origine
In seguito, devi specificare l'istruzione SELECT che restituirà i dati di origine per la tabella pivot. Nel nostro esempio, stiamo restituendo l'ID cliente e il costo dalla tabella Fornitori.
(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable
Applica l'operatore PIVOT, quindi utilizza le funzioni di aggregazione
In seguito, devi specificare la funzione di aggregazione da utilizzare durante la creazione della tabella pivot. Nel nostro esempio, ho utilizzato la funzione AVG per calcolare il costo medio.
PIVOT ( AVG(Cost)
Menziona i valori pivot
Infine, devi menzionare i valori che devono essere inclusi nella tabella pivot risultante. Questi valori verranno utilizzati come intestazioni di colonna nella tabella pivot.
FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Così funzionano gli operatori PIVOT. Proseguendo in questo articolo su SQL PIVOT, cerchiamo di capire quanto sia diverso da SQL UNPIVOT.
SQL UNPIVOT
L'operatore SQL UNPIVOT viene utilizzato per eseguire l'operazione opposta a quella di PIVOT. Viene utilizzato per ruotare i dati della colonna in dati a livello di riga. La sintassi di UNPIVOT è simile a quella di PIVOT. L'unica differenza è che devi utilizzare la parola chiave SQL "UNPIVOT" .
Esempio:
Creiamo una tabella con le colonne SupplierID, AAA, BBB e CCC. Inoltre, inserisci alcuni valori.
CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int); GO INSERT INTO sampletable VALUES (1,3,5,6); INSERT INTO sampletable VALUES (2,9,2,8); INSERT INTO sampletable VALUES (3,8,1,7); GO
Risultato:
ID fornitore | AAA | BBB | CCC |
1 | 3 | 5 | 6 |
2 | 9 | 2 | 8 |
3 | 8 | 1 | 7 |
Ora, diciamo, vogliamo annullare il pivot della tabella. Per farlo, puoi fare riferimento al seguente codice:
SELECT SupplierID, Customers, Products FROM (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC) )AS example; GO
ID fornitore | Clienti | Prodotti |
1 | AAA | 3 |
1 | BBB | 5 |
1 | CCC | 6 |
2 | AAA | 9 |
2 | BBB | 2 |
2 | CCC | 8 |
3 | AAA | 8 |
3 | BBB | 1 |
3 | CCC | 7 |
Ecco come puoi usare SQL PIVOT e UNPIVOT. Con questo, giungiamo alla fine di questo articolo. Spero che tu abbia capito come usare SQL. Se desideri saperne di più su MySQL e conoscere questo database relazionale open source, dai un'occhiata al nostro Formazione per la certificazione DBA MySQL che viene fornito con una formazione dal vivo con istruttore e un'esperienza di progetto nella vita reale. Questa formazione ti aiuterà a comprendere in modo approfondito MySQL e a raggiungere la padronanza dell'argomento.
Hai una domanda per noi? Per favore menzionalo nella sezione commenti di questo articolo su SQL Pivot e ti risponderò.