FRA – Brug af PIVOT og UNPIVOT

  • 14/10/2019
  • 5 minutter til at læse
    • V
    • c
    • M
    • i
    • M
    • +7

Gælder for: SQL Server (alle understøttede versioner) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallelt datalager

Du kan bruge relationerne PIVOT og UNPIVOT til ændre et tabelværdiansat udtryk til en anden tabel. PIVOT roterer et tabelværdiansat udtryk ved at omdanne de unikke værdier fra en kolonne i udtrykket til flere kolonner i output. Og PIVOT kører aggregeringer, hvor de “kræves på eventuelle resterende kolonneværdier, der ønskes i den endelige output. UNPIVOT udfører den modsatte operation til PIVOT ved at rotere søjler i et tabelværdisk udtryk til søjleværdier.

Syntaksen for PIVOT giver er enklere og mere læselig end den syntaks, der ellers kan være specificeret i en kompleks serie af SELECT...CASE udsagn. For en komplet beskrivelse af syntaksen for PIVOT, se FROM (Transact-SQL).

Syntaks

Følgende syntaks opsummerer, hvordan man bruger PIVOT operatøren.

Bemærkninger

Kolonneidentifikatorerne i UNPIVOT -sætningen følger katalogsammensætningen. For SQL Database er sorteringen altid SQL_Latin1_General_CP1_CI_AS. For SQL Server er delvist indeholdt databaser er sorteringen altid Latin1_General_100_CI_AS_KS_WS_SC. Hvis kolonnen er kombineret redigeres med andre kolonner, så kræves der en sorteringsklausul (COLLATE DATABASE_DEFAULT) for at undgå konflikter.

Grundlæggende PIVOT-eksempel

Følgende kodeeksempel producerer en to-søjletabel, der har fire rækker.

Her er resultatsættet.

Ingen produkter er defineret med tre DaysToManufacture.

Følgende kode viser det samme resultat, drejet så DaysToManufacture værdier bliver kolonneoverskrifterne. Der findes en kolonne i tre dage, selvom resultaterne er NULL.

Her er resultatsættet .

Kompleks PIVOT Eksempel

Et almindeligt scenario, hvor PIVOT kan være nyttigt når du vil generere krydstabuleringsrapporter for at give et resumé af dataene. Antag for eksempel, at du vil forespørge PurchaseOrderHeader -tabellen i AdventureWorks2014 eksempeldatabasen for at bestemme antallet af indkøbsordrer, der er afgivet af visse medarbejdere. Følgende forespørgsel indeholder denne rapport, bestilt af leverandør.

Her er et delresultatsæt.

Resultaterne, der returneres af denne undervalg sætning drejes i EmployeeID kolonnen.

De unikke værdier, der returneres af EmployeeID kolonne bliver felter i det endelige resultatsæt. Som sådan er der “en kolonne for hver EmployeeID nummer angivet i pivotklausulen: i dette tilfælde ansatte 250, 251, 256, 257 og 260. div id = “c36dcf6b3b”>

-kolonnen tjener som værdikolonnen, mod hvilken kolonnerne, der returneres i den endelige output, der kaldes grupperingskolonnerne, er grupperet. I dette tilfælde aggregeres grupperingskolonnerne af COUNT -funktion. Bemærk, at der vises en advarselsmeddelelse, der angiver, at eventuelle nulværdier, der vises i PurchaseOrderID -kolonnen, ikke blev taget i betragtning ved beregning af COUNT for hver medarbejder.

Vigtigt

Når samlede funktioner bruges med PIVOT tilstedeværelsen af nulværdier i værdikolonnen tages ikke i betragtning ved beregning af en sammenlægning.

UNPIVOT Eksempel

UNPIVOT udfører næsten den omvendte operation af PIVOT ved at rotere kolonner i rækker. Antag, at tabellen, der blev produceret i det foregående eksempel, er gemt i databasen som pvt, og du vil rotere kolonneidentifikatorerne Emp1, Emp2, Emp3, Emp4 og Emp5 i rækkeværdier, der svarer til en bestemt leverandør. Som sådan skal du identificere to ekstra kolonner.Kolonnen, der indeholder kolonneværdierne, som du roterer (Emp1, Emp2, …) kaldes Employee, og den kolonne, der indeholder de værdier, der aktuelt findes under kolonnerne, der roteres, kaldes Orders. Disse kolonner svarer til pivot_column og value_column henholdsvis i Transact-SQL-definitionen. Her er forespørgslen.

Her er et delvis resultatsæt.

Bemærk, at UNPIVOT er ikke det nøjagtige omvendte af PIVOT. PIVOT udfører en sammenlægning og fletter mulige flere rækker i en enkelt række i output. UNPIVOT reproducerer ikke det oprindelige tabelværdiansatte ekspressionsresultat, fordi rækker er blevet flettet. Også nulværdier i input af UNPIVOT forsvinder i output. Når værdierne forsvinder, viser det, at der muligvis har været originale nulværdier i inputet før PIVOT -operationen.

Sales.vSalesPersonSalesByFiscalYears -visning i AdventureWorks2012-eksempeldatabasen bruger PIVOT til at returnere det samlede salg for hver sælger for hvert regnskabsår. At scripte visningen i SQL Server Management Studio , i Objekt Explorer, find visningen under mappen Visninger til AdventureWorks2012-databasen. Højreklik på visningsnavnet, og vælg derefter Scriptvisning som.

Se også

FROM (Transact -SQL)
CASE (Transact-SQL)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *