Passa ai contenuti principali

SQL Pivot e Unpivot




PIVOT e UNPIVOT SQL





(Le tabelle ed il codice è preso da un articolo di HTML.it)

Spesso serve avere delle tabelle o viste costruite dinamicamente: le colonne che si vogliono rappresentate sono definite mediante i valori di una specifica tabella.

Con SQL Server 2005 e con Oracle 11g si hanno a disposizione questi due nuovi operatori: PIVOT e UNPIVOT.

Una tabella utile al nostro scopo potrebbe essere:




Qui il codice per crearla:


CREATE TABLE Vendite( ID INT NOT NULL, Anno INT NOT NULL, Venditore VARCHAR(50) NOT NULL, Ammontare FLOAT NOT NULL ) ALTER TABLE Vendite ADD ( CONSTRAINT dept_pk PRIMARY KEY (ID)); CREATE SEQUENCE dept_seq START WITH 1; CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON Vendite FOR EACH ROW BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual; END;



Si ipotizzi di avere questi dati racconti in tabella:
IDAnnoVenditoreAmmontare
12009Marco143,3
22009Andrea129
32009Carlo90,5
42009Roberto111
52009Luigi120,1
62008Marco130,7
72008Andrea170,9
82008Carlo167
Qui il codice per popolare la tabella:


INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2009, 'Marco', 143.3); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2009, 'Andrea', 129); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2009, 'Carlo', 90.5); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2009, 'Roberto', 111); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2009, 'Luigi', 120.1); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2008, 'Marco', 130.7); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2008, 'Andrea', 170.9); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2008, 'Carlo', 167); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2008, 'Roberto', 120.6); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2008, 'Luigi', 131); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2007, 'Marco', 112.5); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2007, 'Andrea', 140.2); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2007, 'Carlo', 132); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2007, 'Luigi', 137.5); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2006, 'Marco', 135.5); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2006, 'Andrea', 99); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2006, 'Carlo', 102.4); INSERT INTO Vemdite(Anno, Venditore, Ammontare) VALUES (2006, 'Luigi', 116);

Aggregando per anno mediante:


SELECT Anno, SUM(Ammontare) as TotaleVendite FROM Vemdite GROUP BY Anno ORDER BY Anno DESC;

si ottiene:
AnnoTotaleVendite
2009593,9
2008720,2
2007522,2
2006452,9
Ma quello che ci serve ora è ottenere un'analisi "per anno", qualcosa del genere:

2006200720082009
452,9522,2720,2593,9
Si noti che i valori relativi a gli anni della tabella varieranno nel tempo. La dinamicità di costruzione delle colonne della tabella precedente mediante sta nel fatto che i valori del campo Year della tabella ancora prima costituiranno le colonne della tabella.


Per agevolare questa operazione, ottenibile anche con comandi SQL molto più complessi si è fornito l'operatore PIVOT:

SELECT * FROM (SELECT Anno, Ammontare FROM Vemdite) PIVOT ( SUM(Ammontare) FOR Anno IN (2006, 2007, 2008, 2009) )


L'operazione speculare è l'UNPIVOT che ruota le colonne in righe.



Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.

Commenti

Post popolari in questo blog

Eclipse Che

Eclipse Che

Questo è un IDE lato server e in cloud scritto in Java basato sul concetto di workspace. Per chi è abituato all'uso di Eclipse IDE su desktop troverà molte similitudini. La differenza sostanziale è che Che lo si lancia dal browser !!!



Il browser scarica dal server il "client" rappresentato dall'interfaccia IDE, simile a quella del classico Eclipse desktop, per lavorare sul workspace.




L'interazione del client, nel browser dell'utente, e il workspace avviene mediante API e servizi REST messi a disposizione del server.
Su ogni workspace si possono creare progetti ed installare plugin necessari allo sviluppo e test dell'applicazione.
In ogni workspace si può creare un "ambiente" che può contenere a sua volta una "macchina" sulla quale installare il software.
Che offre, mediante un wizard, la possibilità di scegliere una vasta gamma di stack tecnologici da installare sulla propria macchina (lato server).

Ogni workspace può contenere i …

SEO - Concetti base

Hai creato una app, un sito web, un blog e vuoi che il mondo lo sappia ? Ok devi studiare cosa si intende per SEO.
Definizione SEO sta per "Search Engine Optimization" e sono tutte le tecniche necesarie a fare in modo che i motori di ricerca (Google il più diffuso) indicizzi le pagine web che descrivono il tuo prodotto e le proponga quando qualcuno inserisce parole chiavi che possono ricondurre al settore di appartenenza del tuo prodotto.
Esigenza Chiaramente risulta di interesse che il link alle pagine web del nostro prodotto compaiano quanto più in cima possibile alla lista dei risultati che i motori di ricerca restituiscono. L'obiettivo è quello di essere il primo link restituito.
Tecnologia L'indicizzazione di una pagina o di un sito in un motore di ricerca avviene quando il robot, di quel motore di ricerca, punta l'url e ne registra i contenuti. Quindi abbiamo bisogno di due cose 1) che i robot che indicizzano il web, sono detti "crawler" o "spider&qu…