SQL Server: Klauzule PIVOT


Příklad

Klauzuli PIVOT lze použít na serveru SQL Server (Transact-SQL).

Podívejme se na příklad. Pokud bychom měli tabulku zaměstnanců, která obsahovala následující data:

employee_number last_name first_name plate dept_id
12009 Sutherland Barbara 54000 45
34974 Yates Fred 80000 45
34987 Erickson Neil 42000 45
45001 Parker Sally 57500 30
75623 Gates Steve 65000 30

Spustili jsme následující příkaz SQL, který vytváří křížovou tabulku na dotaz pomocí klauzule PIVOT:

Vrátí následující výsledek:

TotalSalaryByDept 30 45
TotalSalary 122500 176000

Tento příklad by vytvořil kontingenční tabulku pro zobrazení celkového platu pro dept_id 30 a dept_id 45. Výsledky se zobrazí v jednom řádku a zobrazí se dvě oddělení každý ve svém vlastním sloupci.

Nyní pojďme rozdělit klauzuli PIVOT a vysvětlíme, jak to fungovalo.

Určete sloupce ve výsledcích křížových tabulek

Nejprve chceme určit, jaká pole zahrnout do výsledků křížové tabulky. V tomto příkladu chceme jako první sloupec kontingenční tabulky zahrnout doslovnou hodnotu „TotalSalary“. A chceme vytvořit jeden sloupec pro dept_id 30 a druhý sloupec pro dept_id 45. To nám dává 3 kontingenční tabulky.

SELECT "TotalSalary" AS TotalSalaryByDept, , 

Určete zdroj Data tabulky

Dále musíme zadat příkaz SELECT, který vrátí zdrojová data kontingenční tabulky.

V tomto příkladu chceme vrátit hodnoty dept_id a plat z tabulka zaměstnanců:

(SELECT dept_id, salary FROM employees) AS SourceTable

Musíte zadat alias pro zdrojový dotaz. V tomto příkladu jsme dotaz pojmenovali jako SourceTable.

Určete agregační funkci

Dále musíme určit, jakou agregační funkci použít při vytváření dotazu křížové tabulky. Můžete použít libovolný agregát, například funkce SUM, COUNT, MIN, MAX nebo AVG.

V tomto příkladu použijeme funkci SUM. Tím se sečtou hodnoty platu:

PIVOT(SUM(salary)

Určete kontingenční hodnoty

Nakonec musíme určit, jaké kontingenční hodnoty mají být zahrnuty do našich výsledků . Ty budou použity jako záhlaví sloupců v našem křížovém tabulačním dotazu.

V tomto příkladu vrátíme pouze hodnoty dept_id 30 a 45. Tyto hodnoty se stanou našimi záhlavími sloupců v našem otočném čepu stůl. Všimněte si také, že tyto hodnoty jsou konečným seznamem hodnot dept_id a nemusí nutně obsahovat všechny možné hodnoty.

FOR dept_id IN (, )

Teď, když to dáme dohromady, získáme následující kontingenční tabulku:

TotalSalaryByDept 30 45
TotalSalary 122500 176000

Leave a Reply

Napsat komentář

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