Sziasztok!
Ha lenne egy felmérés arról, hogy mik azok a mondatok, amiket a legpontosabban mondanának el ugyanúgy az emberek,akkor szerintem a PIVOT fogalma jó eséllyel pályázhatna egy dobogós helyezésre!
Mi a Pivot? "Hááát, megfordítja 90 fokkal az adatokat, és az oszlopokból sorok lesznek, a sorokból meg oszlopok."
Nice.
- És hogy működik a gyakorlatban?
- És ha Pivotolok egy táblát, majd azt Unpivotolom (nekem a visszapivotolás sokkal jobban tetszene) akkor az eredeti értékeket kapom vissza vajon, vagy nem?
- És ...
Nézzük meg:
Készítünk egy játszós táblát (sql2012 szintaktika), ami mondjuk a Snooker játékosokat fogja tárolni, és azt, hogy ezek a profik melyik pontszerző tornát nyerték meg és mennyiszer.
Azok kedvéért elmondom, akik kevésbé szeretik a snookert, hogy minden évben minden tornát megrendeznek, és világbajnokság is minden évben van.
CREATE TABLE Snooker(Nev VARCHAR(35), Torna VARCHAR(40), Menny INT)INSERT Snooker(Nev,Torna,Menny) VALUES('Sullivan','VB',2),VALUES('Sullivan','China Open',2),VALUES('Sullivan','Masters',4),VALUES('Sullivan','British Open',1), VALUES('Trump','Masters',1),
VALUES('Trump','British Open',3),VALUES('Sullivan','VB',4)Nézzünk egy alap lekérdezést :Select * from SnookerNev Torna Menny-------------------------------------------------Sullivan VB 2 Sullivan China Open 2Sullivan Masters 4 Sullivan British Open 1Trump Masters 1Trump British Open 3Sullivan VB 4 Nézzünk egy Pivot lekérdezést a Tornákra vonatkozóan:
SELECT Torna,Sullivan,Trump
FROM (
SELECT Nev, Torna, Menny FROM Snooker) abc
PIVOT (SUM(Menny) FOR Nev IN (Sullivan, Trump)) AS pvt
ORDER BY TornaTorna Sullivan Trump ------------------------------------------------------------------
British Open 1 3
China Open 2 NULL
Masters 4 1
VB 6 NULL
És ezt már lehet is kiexportálni excelbe! :)
Példa az Unpivotra:
SELECT Torna,Sullivan,Trump
FROM (
SELECT Nev, Torna, Menny FROM Snooker) abc
PIVOT (SUM(Menny) FOR Nev IN (Sullivan, Trump)) AS pvt
UNPIVOT (Menny FOR Nev IN (Sullivan, Trump)) As unpvt
Név Torna Mennyiség---------------------------------------------------
Sullivan VB 6 Sullivan China Open 2Sullivan Masters 4 Sullivan British Open 1Trump Masters 1Trump British Open 3
Konklúzió: Az utolsó példában is lehetett látni, hogy aggregált függvények miatt simán előfordulhat az, hogy a Pivot utána Unpivot nem állítja elő nekünk az eredeti adatokat!
Hajrá Pivot! :)
Nincsenek megjegyzések:
Megjegyzés küldése