Sammanfattning: i denna handledning lär du dig hur du använder SQL Server PIVOT
-operatören för att konvertera rader till kolumner.
Ställa in mål
För demonstrationen använder vi production.products
och production.categories
tabeller från exempeldatabasen:
Följande fråga hittar antalet produkter för varje produktkategori:
Här är utdata:
Vårt mål är att förvandla kategorinamnen från utgångens första kolumn till flera kolumner och räkna antalet produkter för varje kategorinamn som följande bild:
Dessutom kan vi lägga till modellåret för att gruppera kategorin ory efter modellår som visas i följande utdata:
Introduktion till SQL Server PIVOT-operatör
SQL Server PIVOT
operatör roterar ett tabellvärderat uttryck. Det förvandlar de unika värdena i en kolumn till flera kolumner i utdata och utför aggregeringar av alla återstående kolumnvärden.
Du följer dessa steg för att göra en fråga till en pivottabell:
- Välj först en basuppsättning för svängning.
- För det andra, skapa ett tillfälligt resultat med en härledd tabell eller ett gemensamt tabelluttryck (CTE)
- För det tredje, använd
PIVOT
operatör.
Låt oss tillämpa dessa steg i följande exempel.
Välj först kategorinamn och produkt-id från production.products
och production.categories
som basdata för svängning:
För det andra, skapa en tillfällig resultatuppsättning med en härledd tabell:
För det tredje, använd PIVOT
-operatören:
Denna fråga genererar följande utdata:
Nu, varje ytterligare kolumn som du lägger till i listan med frågan som returnerar bas data kommer automatiskt att bilda radgrupper i pivottabellen. Du kan till exempel lägga till modellårskolumnen i ovanstående fråga:
Här är utdata:
Generera kolumnvärden
I ovanstående fråga måste du skriva varje kategorinamn inom parentes efter IN
operatör manuellt. För att undvika detta kan du använda QUOTENAME()
-funktionen för att generera kategorinamnlistan och kopiera dem över frågan.
Generera först kategorinamnlistan:
Utgången ser ut så här:
I det här utdraget:
-
QUOTENAME()
-funktionen slår in kategorinamn med hakparenteser, t.ex. - Funktionen
LEFT()
tar bort det sista kommaet från strängen @column .
För det andra kopierar du listan över kategorinamn från utdata och klistrar in den i frågan.
Dynamiska pivottabeller
Om du lägger till en nytt kategorinamn till production.categories
-tabellen, du måste skriva om din fråga, vilket inte är perfekt. För att undvika att göra detta kan du använda dynamisk SQL för att göra pivottabellen dynamisk.
I denna fråga, istället för att skicka en fast lista med kategorinamn till PIVOT
operatör, vi konstruerar listan över kategorinamn och skickar den till en SQL-sats och kör sedan detta uttalande dynamiskt med den lagrade proceduren sp_executesql
.
I den här självstudien , du har lärt dig hur du använder SQL Server PIVOT
-tabellen för att konvertera rader till kolumner.