Oversigt: i denne vejledning lærer du, hvordan du bruger SQL Server PIVOT
-operatøren for at konvertere rækker til kolonner.
Opsætning af mål
Til demonstrationen bruger vi production.products
og production.categories
tabeller fra eksempeldatabasen:
Følgende forespørgsel finder antallet af produkter for hver produktkategori:
Her er output:
Vores mål er at gøre kategorienavnene fra den første kolonne i output til flere kolonner og tælle antallet af produkter for hver kategorienavn som følgende billede:
Derudover kan vi tilføje modelåret for at gruppere kategorien ory efter modelår som vist i følgende output:
Introduktion til SQL Server PIVOT-operatør
SQL Server PIVOT
-operator roterer et tabelværdiansat udtryk. Det omdanner de unikke værdier i en kolonne til flere kolonner i output og udfører sammenlægninger af eventuelle resterende kolonneværdier.
Du følger disse trin for at gøre en forespørgsel til en pivottabel:
- Vælg først et basesæt til drejning.
- For det andet skal du oprette et midlertidigt resultat ved hjælp af en afledt tabel eller et fælles tabeludtryk (CTE)
- For det tredje skal du anvende
PIVOT
operator.
Lad os anvende disse trin i det følgende eksempel.
Vælg først kategorienavn og produkt-id fra production.products
og production.categories
tabeller som basisdata til drejning:
For det andet skal du oprette et midlertidigt resultatsæt ved hjælp af en afledt tabel:
For det tredje skal du anvende PIVOT
operatoren:
Denne forespørgsel genererer følgende output:
Nu, enhver ekstra kolonne, som du føjer til listen over forespørgsler, der returnerer grundlag data vil automatisk danne række grupper i pivottabellen. For eksempel kan du tilføje modelårskolonnen til ovenstående forespørgsel:
Her er output:
Generering af kolonneværdier
I ovenstående forespørgsel var du nødt til at skrive hvert kategorienavn i parentes efter IN
operatør manuelt. For at undgå dette kan du bruge funktionen QUOTENAME()
til at generere listen over kategorinavne og kopiere dem over forespørgslen.
Generér først kategorienavnelisten:
Outputtet ser sådan ud:
I dette uddrag:
- Funktionen
QUOTENAME()
kategorienavn med firkantede parenteser, fx - Funktionen
LEFT()
fjerner det sidste komma fra @column-strengen .
For det andet skal du kopiere listen over kategorinavne fra output og indsætte den i forespørgslen.
Dynamiske pivottabeller
Hvis du tilføjer en nyt kategorinavn til production.categories
-tabellen, skal du omskrive din forespørgsel, hvilket ikke er ideelt. For at undgå at gøre dette kan du bruge dynamisk SQL til at gøre pivottabellen dynamisk.
I denne forespørgsel i stedet for at videregive en fast liste over kategorienavne til PIVOT
operator, vi konstruerer listen over kategorinavne og sender den til en SQL-sætning og udfører derefter denne sætning dynamisk ved hjælp af den lagrede procedure sp_executesql
.
I denne vejledning , du har lært, hvordan du bruger SQL Server PIVOT
-tabellen til at konvertere rækker til kolonner.