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.
Table of Contents
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;
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.
- La selezione delle 3 colonne di risultato, ovvero Tipo, Mese e Importo.
- Quindi la sub-query SQL con la selezione originale dei dati.
- 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;
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.
Commenta per primo