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
PIVOToperatö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.