Exempel
PIVOT-satsen kan användas i SQL Server (Transact-SQL).
Låt oss titta på ett exempel. Om vi hade en anställdstabell som innehöll följande data:
anställd_nummer | efternamn | förnamn | lön | dept_id |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Portar | Steve | 65000 | 30 |
Och vi körde följande SQL-uttalande som skapar en kors-tabell vid fråga med PIVOT-satsen:
Det skulle ge följande resultat:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
Detta exempel skulle skapa en pivottabell för att visa den totala lönen för dept_id 30 och dept_id 45. Resultaten visas i en rad med de två avdelningarna som visas var och en i sin egen kolumn.
Låt oss nu bryta sönder PIVOT-klausulen och förklara hur den fungerade.
Ange kolumner i resultat för tvärtabeller
Först vill vi ange vilka fält som ska inkluderas i våra korstabellresultat. I det här exemplet vill vi inkludera det bokstavliga värdet ”TotalSalary” som den första kolumnen i pivottabellen. Och vi vill skapa en kolumn för dept_id 30 och en andra kolumn för dept_id 45. Detta ger oss 3 kolumner i vår pivottabell.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Ange källan Tabelldata
Därefter måste vi ange ett SELECT-uttalande som returnerar källdata för pivottabellen.
I det här exemplet vill vi returnera värdena dept_id och lön från tabellen medarbetare:
(SELECT dept_id, salary FROM employees) AS SourceTable
Du måste ange ett alias för källfrågan. I det här exemplet har vi aliaserat frågan som SourceTable.
Ange aggregatfunktion
Därefter måste vi ange vilken sammansatt funktion som ska användas när vi skapar vår tvärtabellfråga. Du kan använda alla aggregat som SUM, COUNT, MIN, MAX eller AVG-funktioner.
I det här exemplet ska vi använda SUM-funktionen. Detta kommer att summera lönevärdena:
PIVOT(SUM(salary)
Ange pivotvärden
Slutligen måste vi ange vilka pivotvärden som ska inkluderas i våra resultat . Dessa kommer att användas som kolumnrubriker i vår tvärtabellfråga.
I det här exemplet kommer vi bara att returnera dept_id-värdena 30 och 45. Dessa värden blir våra kolumnrubriker i vårt led tabell. Observera också att dessa värden är en begränsad lista över dept_id-värdena och inte nödvändigtvis innehåller alla möjliga värden.
FOR dept_id IN (, )
Nu när vi sätter ihop allt, vi får följande pivottabell:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |