У SQL Pivot і Unpivot — це реляційні оператори, які використовуються для перетворення однієї таблиці в іншу, щоб отримати більш спрощений вигляд таблиці. Умовно можна так сказати Поворотний Оператор перетворює дані рядків таблиці в дані стовпців. The Скасувати поворот Оператор робить протилежне, тобто перетворює дані на основі стовпців у рядки.
Синтаксис:
1. Опорна точка:
SELECT (ColumnNames) FROM (TableName) PIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias) //Alias is a temporary name for a table>
2. Скасувати поворот:
SELECT (ColumnNames) FROM (TableName) UNPIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias)>
Приклад-1:
Ми створили просту таблицю під назвою geeksforgeeks із такими значеннями, як назва курсу, категорія курсу та ціна, і вставили відповідні значення.
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> Результат, який ми отримуємо:
| Назва курсу | Категорія курсу | Ціна |
|---|---|---|
| C | ПРОГРАМУВАННЯ | 5000 |
| JAVA | ПРОГРАМУВАННЯ | 6000 |
| PYTHON | ПРОГРАМУВАННЯ | 8000 |
| РОЗМІЩЕННЯ 100 | ПІДГОТОВКА до ІНТЕРВ'Ю | 5000 |
Тепер подача заявки ПІВОТ оператор до цих даних:
SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION ) ) AS PivotTable>
Після використання оператора Pivot ми отримуємо такий результат:
| Назва курсу | ПРОГРАМУВАННЯ | Підготовка до співбесіди |
|---|---|---|
| C | 5000 | НУЛЬ |
| JAVA | 6000 | НУЛЬ |
| РОЗМІЩЕННЯ 100 | НУЛЬ | 5000 |
| PYTHON | 8000 | НУЛЬ |
Приклад-2:
Тепер ми використовуємо ту саму таблицю geeksforgeeks, створену в наведеному вище прикладі, і застосовуємо оператор Unpivot до нашої зведеної таблиці.
Подача заявки UNPIVOT оператор:
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>
Після використання оператора Unpivot ми повертаємо оригінальну таблицю, оскільки ми успішно перетворили стовпці таблиці назад у рядки:
| Назва курсу | Категорія курсу | Ціна |
|---|---|---|
| C | ПРОГРАМУВАННЯ | 5000 |
| JAVA | ПРОГРАМУВАННЯ | 6000 |
| РОЗМІЩЕННЯ 100 | ПІДГОТОВКА до ІНТЕРВ'Ю | 5000 |
| PYTHON | ПРОГРАМУВАННЯ | 8000 |