Eksempel
PIVOT-leddet kan brukes i SQL Server (Transact-SQL).
La oss se på et eksempel. Hvis vi hadde en medarbeidertabell som inneholdt følgende data:
ansatt_nummer | etternavn | fornavn | lønn | dept_id |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Porter | Steve | 65000 | 30 |
Og vi kjørte følgende SQL-setning som skaper en krysstabell på spørsmål ved bruk av PIVOT-setningen:
Det ville gi følgende resultat:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
Dette eksemplet vil opprette en pivottabell for å vise total lønn for dept_id 30 og dept_id 45. Resultatene vises i en rad med de to avdelingene som vises hver i sin egen kolonne.
La oss nå bryte fra hverandre PIVOT-leddet og forklare hvordan det fungerte.
Spesifiser kolonner i resultater på tvers av tabeller
Først vil vi spesifisere hvilke felt som skal inkluderes i resultatene våre på tvers av tabeller. I dette eksemplet ønsker vi å ta med bokstavelig verdien «TotalSalary» som den første kolonnen i pivottabellen. Og vi vil lage en kolonne for dept_id 30 og en andre kolonne for dept_id 45. Dette gir oss 3 kolonner i vår pivottabell.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Spesifiser kilden Tabelldata
Deretter må vi spesifisere en SELECT-setning som vil returnere kildedataene for pivottabellen.
I dette eksemplet ønsker vi å returnere dept_id og lønnsverdiene fra arbeidstabellen:
(SELECT dept_id, salary FROM employees) AS SourceTable
Du må angi et alias for kildesøket. I dette eksemplet har vi aliasert spørringen som SourceTable.
Spesifiser samlet funksjon
Deretter må vi spesifisere hvilken samlet funksjon vi skal bruke når vi oppretter kryss-tabellsspørringen. Du kan bruke et hvilket som helst aggregat som SUM, COUNT, MIN, MAX eller AVG-funksjoner.
I dette eksemplet skal vi bruke SUM-funksjonen. Dette vil oppsummere lønnsverdiene:
PIVOT(SUM(salary)
Angi pivotverdier
Til slutt må vi spesifisere hvilke pivotverdier som skal inkluderes i resultatene våre . Disse vil bli brukt som kolonneoverskrifter i krysstabuleringsforespørselen.
I dette eksemplet skal vi bare returnere dept_id-verdiene på 30 og 45. Disse verdiene blir våre kolonneoverskrifter i vårt ledd bord. Vær også oppmerksom på at disse verdiene er en endelig liste over dept_id-verdiene og ikke nødvendigvis vil inneholde alle mulige verdier.
FOR dept_id IN (, )
Nå når vi setter det hele sammen, vi får følgende pivottabell:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |