Какое назначение у операторов PIVOT и UNPIVOT в Transact-SQL?
PIVOT и UNPIVOT — нестандартные операторы Transact-SQL, выполняющие преобразование таблицы из строкового представления в столбцовое и обратно.
PIVOT разворачивает строки в столбцы: уникальные значения одного столбца становятся именами новых столбцов в результате, а агрегатная функция вычисляет значения для каждой ячейки. Это удобно для создания сводных таблиц (crosstab).
UNPIVOT выполняет обратное преобразование: столбцы разворачиваются обратно в строки. Используется для нормализации данных, которые пришли в «широком» формате.
Пример
-- PIVOT: из строк в столбцы
SELECT *
FROM (SELECT department, quarter, revenue FROM sales) AS src
PIVOT (
SUM(revenue)
FOR quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS pvt;
-- Результат: department | Q1 | Q2 | Q3 | Q4
В PostgreSQL оператор PIVOT отсутствует, но аналогичный результат достигается с помощью CASE-выражений или расширения tablefunc (функция crosstab).
На собеседовании: объясните, что
PIVOTпревращает строки в столбцы (сводная таблица), аUNPIVOT— наоборот. Частая ошибка — не знать, что это специфика T-SQL, и не уметь сделать аналогичное преобразование в PostgreSQL черезCASE.