SQL Server: PIVOT-klausul (Norsk)


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

Leave a Reply

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *