Gymterview
middle

Какое назначение у операторов 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.