Найти в Дзене
ГАУС IT

Немного о PIVOT и UNPIVOT

Приветствую всех. Реляционные операторы PIVOT и UNPIVOT можно использовать для изменения возвращающего табличное значение выражения в другой таблице. PIVOT поворачивает возвращающее табличное значение выражение, преобразуя уникальные значения одного столбца выражения в несколько выходных столбцов. В случае необходимости PIVOT также объединяет оставшиеся повторяющиеся значения столбца и отображает их в выходных данных. UNPIVOT выполняет действия, обратные PIVOT, преобразуя столбцы возвращающего табличное значение выражения в значения столбца. Для начала посмотрим синтаксис Pivot SELECT maker, -- столбец (столбцы), значения из которого формируют заголовки строк [pc], [laptop], [printer] -- значения из столбца, который указан в предложении type, -- формирующие заголовки столбцов FROM Product -- здесь может быть подзапрос PIVOT -- формирование пивот-таблицы (COUNT(model) -- агрегатная функция, формирующая содержимое сводной таблицы FOR type -- указывается столбец, -- уникальные значения в

Приветствую всех.

Реляционные операторы PIVOT и UNPIVOT можно использовать для изменения возвращающего табличное значение выражения в другой таблице. PIVOT поворачивает возвращающее табличное значение выражение, преобразуя уникальные значения одного столбца выражения в несколько выходных столбцов. В случае необходимости PIVOT также объединяет оставшиеся повторяющиеся значения столбца и отображает их в выходных данных. UNPIVOT выполняет действия, обратные PIVOT, преобразуя столбцы возвращающего табличное значение выражения в значения столбца.

Для начала посмотрим синтаксис Pivot

SELECT maker, -- столбец (столбцы), значения из которого формируют заголовки строк
[pc], [laptop], [printer] -- значения из столбца, который указан в предложении type,
-- формирующие заголовки столбцов
FROM Product -- здесь может быть подзапрос
PIVOT -- формирование пивот-таблицы
(COUNT(model) -- агрегатная функция, формирующая содержимое сводной таблицы
FOR type -- указывается столбец,
-- уникальные значения в котором будут являться заголовками столбцов
IN([pc], [laptop], [printer]) --указываются конкретные значения в столбце type,
-- которые следует использовать в качестве заголовков,
-- т.к. нам могут потребоваться не все
) pvt ;-- алиас для сводной таблицы
Пример:
SELECT screen, AVG(price) avg_
FROM Laptop
GROUP BY screen;

Пример:

SELECT [avg_], [11],[12],[14],[15]
FROM (SELECT 'average price' AS 'avg_', screen, price FROM Laptop) x
PIVOT
(AVG(price) FOR screen IN([11],[12],[14],[15])
) pvt;

Unpivot

Как мы говорили ранее, UNPIVOT выполняет обратную по отношению к PIVOT операцию, т.е. представляет данные, записанные в строке таблицы, в одном столбце.

Теперь рассмотрим синтаксис unpivot сразу на примере:

SELECT screen -- заголовок столбца, который будет содержать заголовки
-- строк исходной таблицы
,avg__ AS avg_
-- заголовок столбца, который будет содержать значения из строки исходной таблицы
FROM( -- pivot-запрос из предыдущего примера
SELECT [avg_], [11],[12],[14],[15]
FROM (SELECT 'average price' AS 'avg_', screen, price
FROM Laptop) x
PIVOT (AVG(price) FOR screen IN([11],[12],[14],[15]) )
pvt
-- конец pivot-запроса
) pvt
UNPIVOT (avg__ -- заголовок столбца, который будет содержать значения
-- из столбцов исходной таблицы, перечисленных ниже
FOR screen IN([11],[12],[14],[15])
) unpvt;

Если статья была Вам полезна, ставьте пальцы вверх и подписывайтесь. Оставляйте свои пожелания и вопросы в комментариях, с удовольствием отвечу.

#it #sql #обучение #курс #программирование