SQL Server PIVOT (Čeština)

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *