OD – Používání PIVOT a UNPIVOT

  • 10/14/2019
  • 5 minut na čtení
    • V
    • c
    • M
    • i
    • M
    • +7

Platí pro: SQL Server (všechny podporované verze) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallel Data Warehouse

Můžete použít relační operátory PIVOT a UNPIVOT změnit výraz s hodnotou tabulky na jinou tabulku. PIVOT otočí výraz s hodnotou tabulky otočením jedinečných hodnot z jednoho sloupce ve výrazu do více sloupců na výstupu. A PIVOT spouští agregace, kde jsou požadovány u všech zbývajících hodnot sloupců, které jsou požadovány v konečném výstupu. UNPIVOT provádí opačnou operaci na PIVOT otáčením sloupců výrazu s hodnotami v tabulce do hodnot sloupců.

Syntaxe pro PIVOT poskytuje je jednodušší a čitelnější než syntaxe, která by jinak mohla být uvedeno v komplexní řadě SELECT...CASE prohlášení. Úplný popis syntaxe pro PIVOT najdete v části FROM (Transact-SQL).

Syntaxe

Následující syntaxe shrnuje, jak používat operátor PIVOT.

Poznámky

Identifikátory sloupců v klauzuli UNPIVOT sledují řazení katalogu. U SQL Database je řazení vždy SQL_Latin1_General_CP1_CI_AS. U serveru SQL Server částečně obsažen databází je řazení vždy Latin1_General_100_CI_AS_KS_WS_SC. Pokud je sloupec kombinován ed s jinými sloupci, pak je vyžadována klauzule kompletování (COLLATE DATABASE_DEFAULT), aby nedocházelo ke konfliktům.

Základní příklad PIVOT

Následující příklad kódu vytvoří dvousloupcovou tabulku se čtyřmi řádky.

Zde je sada výsledků.

Se třemi produkty nejsou definovány žádné produkty DaysToManufacture.

Následující kód zobrazí stejný výsledek, otočený tak, že DaysToManufacture hodnoty se stanou záhlavími sloupců. K dispozici je sloupec na tři dny, přestože výsledky jsou NULL.

Zde je sada výsledků .

Složitý příklad PIVOT

Běžný scénář, kde může být užitečný PIVOT, když chcete generovat výkazy mezi tabulkami a poskytnout souhrn údajů. Předpokládejme například, že chcete dotazovat PurchaseOrderHeader tabulku v AdventureWorks2014 vzorové databázi a určit počet objednávek zadaných určitými zaměstnanci. Následující dotaz poskytuje tento přehled seřazený podle dodavatele.

Zde je částečná sada výsledků.

Výsledky vrácené tímto dílčím výběrem příkaz je otočen ve sloupci EmployeeID.

Jedinečné hodnoty vrácené EmployeeID sloupec se stane poli v sadě konečných výsledků. Jako takový existuje „sa sloupec pro každé EmployeeID číslo uvedené v kontingenční klauzuli: v tomto případě zaměstnanci 250, 251, 256, 257 a 260. sloupec div id = „c36dcf6b3b“>

slouží jako sloupec hodnoty, proti kterému jsou seskupeny sloupce vrácené v konečném výstupu, které se nazývají seskupovací sloupce. V tomto případě jsou seskupovací sloupce agregovány pomocí COUNT. Všimněte si, že se zobrazí varovná zpráva, která naznačuje, že při výpočtu PurchaseOrderID sloupce PurchaseOrderID nebyly brány v úvahu id = „fccf2035df“>

pro každého zaměstnance.

Důležité

Při použití agregačních funkcí s PIVOT , při výpočtu agregace není zohledněna přítomnost žádných hodnot null ve sloupci hodnot.

Příklad UNPIVOT

UNPIVOT provádí téměř obrácenou operaci PIVOT otáčením sloupců do řádků. Předpokládejme, že tabulka vytvořená v předchozím příkladu je uložena v databázi jako pvt a chcete otočit identifikátory sloupců Emp1, Emp2, Emp3, Emp4 a Emp5 do řádkových hodnot, které odpovídají konkrétnímu dodavateli. Jako takový musíte identifikovat dva další sloupce.Sloupec, který bude obsahovat hodnoty sloupců, které „otáčíte (Emp1, Emp2, …), se bude jmenovat Employee a sloupec, který bude obsahovat hodnoty, které aktuálně existují pod rotovanými sloupci, se bude jmenovat Orders. Tyto sloupce odpovídají pivot_column a value_column v definici Transact-SQL. Zde je dotaz.

Zde je částečná sada výsledků.

Všimněte si, že UNPIVOT není přesný opak PIVOT. PIVOT provede agregaci a na výstupu sloučí možné více řádků do jednoho řádku. UNPIVOT nereprodukuje původní výsledek výrazu s tabulkovou hodnotou, protože byly sloučeny řádky. Také zmizí nulové hodnoty ve vstupu UNPIVOT Když hodnoty zmizí, ukazuje to, že na vstupu před operací PIVOT mohly být původní nulové hodnoty.

Sales.vSalesPersonSalesByFiscalYears zobrazení v ukázkové databázi AdventureWorks2012 používá PIVOT k vrácení celkového prodeje pro každého prodejce za každý fiskální rok. Skriptování zobrazení v SQL Server Management Studio , v Průzkumníku objektů vyhledejte pohled ve složce Pohledy pro databázi AdventureWorks2012. Klepněte pravým tlačítkem na název pohledu a poté vyberte Pohled skriptu jako.

Viz také

FROM (Transact -SQL)
PŘÍPAD (Transact-SQL)

Napsat komentář

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