SQL Server PIVOT (Norsk)

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.

Legg igjen en kommentar

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