logo

Pivot a Unpivot v SQL

V SQL sú Pivot a Unpivot relačné operátory, ktoré sa používajú na transformáciu jednej tabuľky na druhú, aby sa dosiahlo jednoduchšie zobrazenie tabuľky. Bežne to môžeme povedať Pivot operátor konvertuje údaje riadkov tabuľky na údaje stĺpcov. The Unpivot Operátor robí opak, teda transformuje údaje založené na stĺpcoch na riadky.

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. Odklopenie:

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

Príklad-1:
Vytvorili sme jednoduchú tabuľku s názvom geeksforgeeks s hodnotami ako Názov kurzu, kategória kurzu a cena a vložili sme prí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, ktorý dostaneme, je:

Názov kurzu Kategória kurzu cena
C PROGRAMOVANIE 5000
JAVA PROGRAMOVANIE 6000
PYTHON PROGRAMOVANIE 8000
UMIESTNENIE 100 PRÍPRAVA NA ROZHOVOR 5000

Teraz podanie žiadosti PIVOT prevádzkovateľa k týmto údajom:

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

Po použití Pivot operátora dostaneme nasledujúci výsledok:

Názov kurzu PROGRAMOVANIE Príprava na rozhovor
C 5000 NULOVÝ
JAVA 6000 NULOVÝ
UMIESTNENIE 100 NULOVÝ 5000
PYTHON 8000 NULOVÝ

Príklad-2:
Teraz používame rovnakú tabuľku geeksforgeeks vytvorenú vo vyššie uvedenom príklade a aplikujeme operátor Unpivot na našu kontingenčnú tabuľku.

Uplatňuje sa NEPIVOT 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í operátora Unpivot získame našu pôvodnú tabuľku späť, pretože sme úspešne transformovali stĺpce tabuľky späť na riadky:

Názov kurzu Kategória kurzu cena
C PROGRAMOVANIE 5000
JAVA PROGRAMOVANIE 6000
UMIESTNENIE 100 PRÍPRAVA NA ROZHOVOR 5000
PYTHON PROGRAMOVANIE 8000