FRÅN – Använd PIVOT och UNPIVOT

  • 14/10/2019
  • 5 minuter att läsa
    • V
    • c
    • M
    • i
    • M
    • +7

Gäller för: SQL Server (alla versioner som stöds) Azure SQL-databas Azure SQL-hanterad instans Azure Synapse Analytics Parallellt datalager

Du kan använda relationerna PIVOT och UNPIVOT till ändra ett tabellvärderat uttryck till en annan tabell. PIVOT roterar ett tabellvärderat uttryck genom att förvandla de unika värdena från en kolumn i uttrycket till flera kolumner i utdata. Och PIVOT kör aggregeringar där de krävs för alla återstående kolumnvärden som önskas i den slutliga utgången. UNPIVOT utför motsatt operation till PIVOT genom att rotera kolumner i ett tabellvärderat uttryck till kolumnvärden.

Syntaxen för PIVOT ger är enklare och mer läsbar än den syntax som annars kan vara specificerad i en komplex serie av SELECT...CASE uttalanden. För en fullständig beskrivning av syntaxen för PIVOT, se FROM (Transact-SQL).

Syntax

Följande syntax sammanfattar hur man använder PIVOT operatören.

Anmärkningar

Kolumnidentifierarna i UNPIVOT -satsen följer katalogsorteringen. För SQL-databas är sorteringen alltid SQL_Latin1_General_CP1_CI_AS. För SQL Server ingår delvis databaser är sorteringen alltid Latin1_General_100_CI_AS_KS_WS_SC. Om kolumnen är kombinerad redigeras med andra kolumner, sedan krävs en sorteringssats (COLLATE DATABASE_DEFAULT) för att undvika konflikter.

Grundläggande PIVOT-exempel

Följande kodexempel ger en tabell med två kolumner som har fyra rader.

Här är resultatuppsättningen.

Inga produkter definieras med tre DaysToManufacture.

Följande kod visar samma resultat, svängt så att DaysToManufacture värden blir kolumnrubrikerna. En kolumn tillhandahålls under tre dagar, även om resultaten är NULL.

Här är resultatuppsättningen .

Komplex PIVOT-exempel

Ett vanligt scenario där PIVOT kan vara användbart när du vill generera kors-tabellrapporter för att ge en sammanfattning av data. Antag till exempel att du vill fråga PurchaseOrderHeader tabellen i AdventureWorks2014 exempeldatabasen för att bestämma antalet inköpsorder som vissa anställda gör. Följande fråga ger denna rapport, beställd av leverantör.

Här är en deluppsättning.

Resultaten som returneras av detta underval uttalande svängs i kolumnen EmployeeID.

De unika värdena som returneras av EmployeeID kolumn blir fält i den slutliga resultatuppsättningen. Som sådan finns det en sa kolumn för varje EmployeeID nummer som anges i pivotklausulen: i detta fall anställda 250, 251, 256, 257 och 260. div id = ”c36dcf6b3b”>

-kolumnen fungerar som värdekolumnen, mot vilken kolumnerna som returneras i den slutliga utgången, som kallas grupperingskolumnerna, grupperas. I detta fall aggregeras grupperingskolumnerna av COUNT -funktion. Observera att ett varningsmeddelande visas som indikerar att alla nollvärden som visas i PurchaseOrderID -kolumnen inte beaktades vid beräkning av COUNT för varje anställd.

Viktigt

När aggregerade funktioner används med PIVOT närvaron av nollvärden i värdekolumnen beaktas inte vid beräkning av en aggregering.

UNPIVOT Exempel

UNPIVOT utför nästan den omvända operationen av PIVOT genom att rotera kolumner i rader. Anta att tabellen i föregående exempel lagras i databasen som pvt, och du vill rotera kolumnidentifierarna Emp1, Emp2, Emp3, Emp4 och Emp5 i radvärden som motsvarar en viss leverantör. Som sådan måste du identifiera ytterligare två kolumner.Kolumnen som innehåller kolumnvärdena som du roterar (Emp1, Emp2, …) kommer att kallas Employee, och kolumnen som innehåller de värden som för närvarande finns under kolumnerna som roteras kommer att kallas Orders. Dessa kolumner motsvarar pivot_column och value_column respektive i Transact-SQL-definitionen. Här är frågan.

Här är en delresultatsats.

Observera att UNPIVOT är inte det exakta omvändet av PIVOT. PIVOT genomför en aggregering och slår samman möjliga flera rader till en enda rad i utdata. UNPIVOT reproducerar inte det ursprungliga tabellvärderade uttrycksresultatet eftersom rader har sammanfogats. Nollvärden i ingången till UNPIVOT försvinner också. i utgången. När värdena försvinner visar det att det kan ha funnits ursprungliga nollvärden i ingången före PIVOT -operationen.

Sales.vSalesPersonSalesByFiscalYears -vy i AdventureWorks2012-exempeldatabasen använder PIVOT för att returnera den totala försäljningen för varje säljare för varje räkenskapsår. För att skripta vyn i SQL Server Management Studio , i Object Explorer, leta reda på vyn under mappen Views för AdventureWorks2012-databasen. Högerklicka på visningsnamnet och välj sedan Script View som.

Se även

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *