SQL Server PIVOT (Svenska)

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.

Lämna ett svar

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