logo

Susukti ir Unpivot SQL

SQL sistemoje „Pivot“ ir „Unpivot“ yra reliaciniai operatoriai, naudojami vienai lentelei paversti kita, kad lentelės vaizdas būtų paprastesnis. Tradiciškai galime taip sakyti Pivot operatorius konvertuoja lentelės eilučių duomenis į stulpelio duomenis. The Atsukti operatorius veikia priešingai, ty paverčia stulpeliais pagrįstus duomenis į eilutes.

Sintaksė:

1. Suvestinė:



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

2. Atsukti:

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

1 pavyzdys:
Sukūrėme paprastą lentelę pavadinimu geeksforgeeks su tokiomis reikšmėmis kaip Kurso pavadinimas, kurso kategorija ir kaina bei įtraukėme atitinkamas reikšmes.

 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>

Išvestis, kurią gauname, yra:

Kurso pavadinimas Kurso kategorija Kaina
C PROGRAMAVIMAS 5000
JAVA PROGRAMAVIMAS 6000
PYTONAS PROGRAMAVIMAS 8000
VIETA 100 PARENGIMAS INTERVIU 5000

Dabar taikymas PIVOT operatorius prie šių duomenų:

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

Panaudoję Pivot operatorių gauname tokį rezultatą:

Kurso pavadinimas PROGRAMAVIMAS Interviu pasirengimas
C 5000 NULL
JAVA 6000 NULL
VIETA 100 NULL 5000
PYTONAS 8000 NULL

2 pavyzdys:
Dabar mes naudojame tą pačią lentelę geeksforgeeks, sukurtą aukščiau esančiame pavyzdyje, ir pritaikome Unpivot operatorių savo suvestinei lentelei.

Taikymas UNPIVOTAS operatorius:

 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>

Panaudoję Unpivot operatorių, grąžiname pradinę lentelę, nes sėkmingai transformavome lentelės stulpelius į eilutes:

Kurso pavadinimas Kurso kategorija Kaina
C PROGRAMAVIMAS 5000
JAVA PROGRAMAVIMAS 6000
VIETA 100 PARENGIMAS INTERVIU 5000
PYTONAS PROGRAMAVIMAS 8000