logo

Pivot і Unpivot у SQL

У 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