logo

Pivot un Unpivot SQL

SQL valodā Pivot un Unpivot ir relāciju operatori, kurus izmanto, lai pārveidotu vienu tabulu citā, lai iegūtu vienkāršāku tabulas skatu. Tradicionāli mēs to varam teikt Rakurs operators pārvērš tabulas rindu datus kolonnas datos. The Atcelt operators rīkojas pretēji, tas ir, pārveido kolonnas datus rindās.

Sintakse:



1. Rakurss:

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

2. Atcelt:

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

1. piemērs:
Mēs esam izveidojuši vienkāršu tabulu ar nosaukumu geeksforgeeks ar tādām vērtībām kā Kursa nosaukums, kursa kategorija un cena un ievietojuši attiecīgās vērtības.



 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>

Izvade, ko mēs iegūstam, ir:

Kursa nosaukums Kursa kategorija Cena
C PROGRAMMĒŠANA 5000
JAVA PROGRAMMĒŠANA 6000
PITONS PROGRAMMĒŠANA 8000
VIETA 100 INTERVIJAS SAGATAVOŠANA 5000

Tagad pieteikšanās PIVOT operatoram šiem datiem:

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

Pēc Pivot operatora izmantošanas mēs iegūstam šādu rezultātu:



Kursa nosaukums PROGRAMMĒŠANA Intervijas sagatavošana
C 5000 NULL
JAVA 6000 NULL
VIETA 100 NULL 5000
PITONS 8000 NULL

2. piemērs:
Tagad mēs izmantojam to pašu tabulu geeksforgeeks, kas izveidota iepriekš minētajā piemērā, un savai Pivoted tabulai lietojam operatoru Unpivot.

Pieteikšanās UNPIVOT operators:

 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>

Pēc Unpivot operatora izmantošanas mēs atgūstam sākotnējo tabulu, jo esam veiksmīgi pārveidojuši tabulas kolonnas atpakaļ uz rindām:

Kursa nosaukums Kursa kategorija Cena
C PROGRAMMĒŠANA 5000
JAVA PROGRAMMĒŠANA 6000
VIETA 100 INTERVIJAS SAGATAVOŠANA 5000
PITONS PROGRAMMĒŠANA 8000