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
PIVOToperá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.