Database
 sql >> Database >  >> RDS >> Database

SQL Pivot – Scopri come convertire le righe in colonne

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ò.