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 |