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
PIVOToperator.
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.