Sammendrag: I denne opplæringen lærer du hvordan du bruker SQL Server PIVOT
-operatøren for å konvertere rader til kolonner.
Sette opp målene
For demonstrasjonen vil vi bruke production.products
og production.categories
tabeller fra eksempeldatabasen:
Følgende spørsmål finner antall produkter for hver produktkategori:
Her er utdataene:
Målet vårt er å gjøre kategorinavnene fra den første kolonnen i utgangen til flere kolonner og telle antall produkter for hver kategorienavn som følgende bilde:
I tillegg kan vi legge til modellåret for å gruppere kategorien ory etter modellår som vist i følgende utgang:
Introduksjon til SQL Server PIVOT-operatør
SQL Server PIVOT
operatør roterer et tabellverdig uttrykk. Det gjør de unike verdiene i en kolonne til flere kolonner i utdataene og utfører aggregeringer av eventuelle gjenværende kolonneverdier.
Du følger disse trinnene for å gjøre et spørsmål til en pivottabell:
- Velg først et basedatasett for svinging.
- For det andre, opprett et midlertidig resultat ved å bruke en avledet tabell eller et felles tabelluttrykk (CTE)
- For det tredje, bruk
PIVOT
operator.
La oss bruke disse trinnene i følgende eksempel.
Velg først kategorinavn og produkt-ID fra production.products
og production.categories
tabeller som basisdata for svinging:
For det andre, opprett et midlertidig resultatsett ved hjelp av en avledet tabell:
For det tredje, bruk PIVOT
operator:
Dette spørsmålet genererer følgende utdata:
Nå, en hvilken som helst ekstra kolonne som du legger til i listen over spørsmål som returnerer utgangspunkt data vil automatisk danne radgrupper i pivottabellen. For eksempel kan du legge til modellårskolonnen i spørringen ovenfor:
Her er utdataene:
Genererer kolonneverdier
I spørringen ovenfor måtte du skrive inn hvert kategorinavn i parentes etter IN
operatør manuelt. For å unngå dette kan du bruke QUOTENAME()
-funksjonen til å generere kategorienavnelisten og kopiere dem over spørringen.
Generer først kategorilisten:
Utgangen vil se slik ut:
I dette kodebiten:
-
QUOTENAME()
-funksjonen bryter inn kategorienavn med firkantede parenteser, f.eks -
LEFT()
-funksjonen fjerner det siste kommaet fra @columnstrengen .
For det andre, kopier kategorilisten fra utdataene og lim den inn i spørringen.
Dynamiske pivottabeller
Hvis du legger til en nytt kategorinavn til production.categories
-tabellen, må du skrive om spørsmålet ditt, noe som ikke er ideelt. For å unngå å gjøre dette, kan du bruke dynamisk SQL for å gjøre pivottabellen dynamisk.
I dette spørsmålet, i stedet for å sende en fast liste over kategorienavn til PIVOT
-operatør, vi konstruerer listen over kategorier og sender den til en SQL-setning, og utfører deretter denne setningen dynamisk ved hjelp av den lagrede prosedyren sp_executesql
.
I denne veiledningen , har du lært hvordan du bruker SQL Server PIVOT
-tabellen for å konvertere rader til kolonner.