logo

Pivot a Unpivot v SQL

V SQL jsou Pivot a Unpivot relační operátory, které se používají k transformaci jedné tabulky do druhé, aby se dosáhlo jednoduššího zobrazení tabulky. Konvenčně to můžeme říci Pivot operátor převede data řádků tabulky na data sloupců. The Unpivot Operátor dělá opak, tedy transformuje data založená na sloupcích na řádky.

Syntax:

1. Pivot:



 SELECT (ColumnNames) FROM (TableName) PIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias) //Alias is a temporary name for a table>

2. Odklopení:

 SELECT (ColumnNames) FROM (TableName) UNPIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias)>

Příklad-1:
Vytvořili jsme jednoduchou tabulku s názvem geeksforgeeks s hodnotami, jako je název kurzu, kategorie kurzu a cena, a vložili jsme příslušné hodnoty.

 Create Table geeksforgeeks ( CourseName nvarchar(50), CourseCategory nvarchar(50), Price int ) Insert into geeksforgeeks values('C', 'PROGRAMMING', 5000) Insert into geeksforgeeks values('JAVA', 'PROGRAMMING', 6000) Insert into geeksforgeeks values('PYTHON', 'PROGRAMMING', 8000) Insert into geeksforgeeks values('PLACEMENT 100', 'INTERVIEWPREPARATION', 5000) SELECT * FROM geeksforgeeks>

Výstup, který dostaneme, je:

Název kurzu CourseCategory Cena
C PROGRAMOVÁNÍ 5000
JÁVA PROGRAMOVÁNÍ 6000
KRAJTA PROGRAMOVÁNÍ 8000
UMÍSTĚNÍ 100 PŘÍPRAVA ROZHOVORU 5000

Nyní přihlášky PIVOT provozovatel k těmto údajům:

 SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION ) ) AS PivotTable>

Po použití Pivot operátoru dostaneme následující výsledek:

Název kurzu PROGRAMOVÁNÍ Příprava na pohovor
C 5000 NULA
JÁVA 6000 NULA
UMÍSTĚNÍ 100 NULA 5000
KRAJTA 8000 NULA

Příklad-2:
Nyní použijeme stejnou tabulku geeksforgeeks vytvořenou ve výše uvedeném příkladu a aplikujeme operátor Unpivot na naši kontingenční tabulku.

Uplatňuje se NESPIVOT operátor:

 SELECT CourseName, CourseCategory, Price FROM ( SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION) ) AS PivotTable ) P UNPIVOT ( Price FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION) ) AS UnpivotTable>

Po použití Unpivot operátoru získáme zpět naši původní tabulku, protože jsme úspěšně transformovali sloupce tabulky zpět na řádky:

Název kurzu CourseCategory Cena
C PROGRAMOVÁNÍ 5000
JÁVA PROGRAMOVÁNÍ 6000
UMÍSTĚNÍ 100 PŘÍPRAVA ROZHOVORU 5000
KRAJTA PROGRAMOVÁNÍ 8000