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 |