Shrnutí: v tomto výukovém programu se naučíte používat operátor SQL Server PIVOT
převést řádky na sloupce.
Nastavení cílů
Pro demonstraci použijeme production.products
a production.categories
tabulky ze vzorové databáze:
Následující dotaz vyhledá počet produktů pro jednotlivé kategorie produktů:
Zde je výstup:
Naším cílem je převést názvy kategorií z prvního sloupce výstupu do více sloupců a spočítat počet produktů pro každý z nich název kategorie jako na následujícím obrázku:
Kromě toho můžeme přidat modelový rok do skupiny podle modelového roku, jak ukazuje následující výstup:
Úvod do operátoru PIVOT serveru SQL Server
Operátor SQL Server PIVOT
otočí výraz s hodnotou tabulky. Ukazuje jedinečné hodnoty v jednom sloupci na více sloupců ve výstupu a provádí agregace u všech zbývajících hodnot sloupců.
Pomocí následujícího postupu vytvoříte z dotazu kontingenční tabulku:
- Nejprve vyberte základní datovou sadu pro otočení.
- Zadruhé vytvořte dočasný výsledek pomocí odvozené tabulky nebo společného výrazu tabulky (CTE)
- Za třetí, použijte
PIVOT
operátor.
Tyto kroky použijeme v následujícím příkladu.
Nejprve vyberte název kategorie a ID produktu z production.products
a production.categories
tabulky jako základní data pro otočení:
Zadruhé, vytvořte dočasnou sadu výsledků pomocí odvozené tabulky:
Zatřetí, použijte operátor PIVOT
:
Tento dotaz vygeneruje následující výstup:
Nyní další sloupec, který přidáte do seznamu pro výběr dotazu, který vrací základna data automaticky vytvoří skupiny řádků v kontingenční tabulce. Do výše uvedeného dotazu můžete například přidat sloupec modelového roku:
Zde je výstup:
Generování hodnot sloupců
Ve výše uvedeném dotazu bylo nutné zadat každý název kategorie do závorek za IN
operátor ručně. Chcete-li tomu zabránit, můžete pomocí funkce QUOTENAME()
vygenerovat seznam názvů kategorií a zkopírovat je přes dotaz.
Nejprve vygenerujte seznam názvů kategorií:
Výstup bude vypadat takto:
V tomto fragmentu:
- Funkce
QUOTENAME()
zabalí název kategorie v hranatých závorkách, např. - Funkce
LEFT()
odstraní poslední čárku z řetězce @columns .
Zadruhé zkopírujte seznam názvů kategorií z výstupu a vložte jej do dotazu.
Dynamické kontingenční tabulky
Pokud přidáte nový název kategorie v tabulce production.categories
, je třeba přepsat dotaz, což není ideální. Chcete-li tomu zabránit, můžete k dynamické kontingenční tabulce použít dynamický SQL.
V tomto dotazu namísto předávání pevného seznamu názvů kategorií do PIVOT
operátor, vytvoříme seznam názvů kategorií a předáme jej příkazu SQL a poté tento příkaz provedeme dynamicky pomocí uložené procedury sp_executesql
.
V tomto výukovém programu , jste se naučili používat tabulku SQL Server PIVOT
k převodu řádků na sloupce.