Esempio di UNPIVOT in SQL Server

Con questo esempio di T-SQL, puoi facilmente trasformare colonne in righe con un solo passo grazie alla funzione UNPIVOT di SQL Server.

È l’esatto opposto della query PIVOT. In questo esempio, vengono utilizzate solo le colonne dei primi sei mesi dell’anno, da gennaio a giugno. Tuttavia, puoi estendere la query a tutti i 12 periodi dell’anno aggiungendo quelli mancanti.

1. Crea dati da trasformare in righe usando l’operatore UNPIVOT

Ad esempio, la tabella delle vendite di SQL Server contiene una colonna per il tipo e le colonne per i mesi. Contengono rispettivamente il tipo e l’importo delle vendite per il mese. Per iniziare, basta copiare e incollare la query SQL per la creazione della tabella all’interno di SSMS.

Prima di tutto, crea la tabella di esempio usando questo script, semplicemente copia e incolla l’esempio nella tua finestra di SQL Server Management Studio.

-- Prima di tutto ELIMINA la tabella Vendite per mese se già esiste nel db
IF EXISTS( 
	SELECT 1 FROM sys.objects
     WHERE object_id = object_id(N'[dbo].[SALES_BY_MONTH]')
		AND type in (N'U') )
-- BEGIN DROP TABLE [dbo].[SALES_BY_MONTH]
END;

-- Crea la tabella VENDITE
CREATE table [dbo].[SALES_BY_MONTH] (
    [SalesType] NVARCHAR(20),
    [January] NUMERIC(5),
    [February] NUMERIC(5),
    [March] NUMERIC(5),
    [April] NUMERIC(5),
    [May] NUMERIC(5),
    [June] NUMERIC(5)
);

2. Inserisci dati nella tabella sorgente da trasformare

Successivamente, inserisci i dati nella tabella da trasporre. Ogni inserimento di dati SQL aggiunge 12 nuovi importi di vendite. Una colonna per mese, con il tipo di vendita associato.

Aggiungi i mesi mancanti se necessario. In questo modo potrai trasformare i 12 mesi dell’anno da colonne a righe in un’unica query di SQL Server.

-- Inserisci dati di vendita di esempio per ogni mese: ad es. da gennaio a giugno
-- Le colonne dei mesi verranno trasposte da colonne a righe
INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] )
VALUES ( N'Vendite', 1000, 2000, 3000, 4000, 5000, 6000);

INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] )
VALUES ( N'Sconti', 100, 200, 300, 400, 500, 600);

INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] )
VALUES ( N'Offerte', 10, 20, 30, 40, 50, 60);

-- Controlla le righe inserite nella tabella delle vendite
SELECT * 
FROM   dbo.SALES_BY_MONTH;
Inserisci dati per trasformare da colonne a righe usando T-SQL UNPIVOT
Inserisci dati per trasformare da colonne a righe usando T-SQL UNPIVOT

3. Query UNPIVOT di SQL Server per trasformare colonne in righe

Infine, la funzione UNPIVOT di SQL Server si compone di 3 diversi passaggi per trasporre le colonne in righe.

  1. La selezione delle 3 colonne di risultato, ovvero Tipo, Mese e Importo.
  2. Quindi la sub-query SQL con la selezione originale dei dati.
  3. L’operazione UNPIVOT in sé con i 6 mesi nominati esplicitamente.
-- UNPIVOT Colonne in Righe con Query SQL
SELECT [TYPE], Month, Amount
FROM (	
	SELECT [TYPE], [January], [February], [March], [April], [May], [June]
	FROM dbo.SALES_BY_MONTH 	) sbm
UNPIVOT
   (Amount FOR Month IN 
      ([January], [February], [March], [April], [May], [June])
)AS SalesUnPivot;
Esempio di query UNPIVOT di SQL Server in SSMS
Esempio di query UNPIVOT di SQL Server in SSMS

Riguardo gli operatori PIVOT e UNPIVOT di SQL Server

In aggiunta, se stai ancora incontrando difficoltà con l’operatore UNPIVOT di SQL Server e la sua sintassi, semplicemente copia e incolla l’esempio e ripeti i tre passi adattandoli al tuo caso reale. Inizia rinominando le colonne per capire come funziona. In conclusione, per leggere più dettagli, la documentazione ufficiale Microsoft per la funzione unpivot è disponibile. L’UNPIVOT è l’opposto della funzione PIVOT, ecco un altro breve tutorial per usare la funzione PIVOT di SQL Server.

Be the first to comment

Leave a Reply

Your email address will not be published.


*