SQL know-how
Hidtil kunne man gruppere elementer i SQL udtræk, men PIVOT tilbyder to dimensionale gruppering af elementer i SQL udtræk. Den samme type som man kander fra Excels PIVOT tabeller eller en matrix kontrol fra Reporting Services.
For eksemplet bruger vi ”Northwind” databasen, har du ikke den, kan hentes fra følgende adresse: http://sql.yaha.dk/NorthwindAndPubs/InstallNorthwindAndPubs.html
Nedenstående udtræk laver en oversigt over hvilken sælger har sold hvilket produkt til hvilken kunde:
SELECT e.firstName,c.CompanyName |
|
Når man eksekverer utrykt, få man en oversigt med masse gentagelse i listen. Det vi kunne ønsker os, var at få fat i vil summering af kunder og sælger, der har været involveret i salg og køb af produkterne. For at opnå dette vi inkludere COUNT funktion plus GROUP BY klausul til udtrykket.
SELECT e.firstName,c.CompanyName, COUNT(o.orderID) |
|
Nu forsøger vi at tag den ny PIVOT funktion i brug. I første omgange vi prøve en simpelt SQL udtryk, vi brugere ”Orders” tabellen, da vi vide på forhånd at der kun er 9 sælger er involveret i salget, bruge vi tallet 1-9 til at repræsentere ”employeeID”:
SELECT * FROM Orders
PIVOT (COUNT(employeeID) FOR employeeID IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])) p
Udtrækket er resultatet af PIVOT funktionen og ikke tabellen “ Orders”. Funktionen returnerer alle feltet fra tabellen ”Orders” undtagen ”employeeID”. Feltet er fjende da den er basis for COUNT funktionen i udtrækket.
For at funktionen PIVOT viser sin stykke, vi giver en forståelig navn for hver tal i vores forrige udtræk og forbinder det med tabellen ”customers”, for at se hvem har købet produkterne af hvem:
SELECT c.companyName,
[1] as [Nancy],
[2] as [Andrew],
[3] as [Janet],
[4] as [Margaret],
[5] as [Steven],
[6] as [Michael],
[7] as [Robert],
[8] as [Laura],
[9] as [Anne]
FROM (SELECT customerID,employeeID FROM Orders) o
PIVOT (COUNT(employeeID) FOR employeeID IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])) p
JOIN Customers c ON p.customerID=c.customerID
ORDER BY c.CompanyName
Som man se X akslen nu repræsentere kunderne og Y akslen repræsentere sælger og vi kan samtidig se hvor mange der er solgt til hver kunde.