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 |