Назад к вопросам
Middle
166
questionbank

Каково назначение операторов PIVOT и UNPIVOT в Transact-SQL?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Операторы PIVOT и UNPIVOT используются для изменения структуры таблиц в Transact-SQL.

PIVOT преобразует уникальные значения из одной колонки (Pivot Column) в новые колонки в выходной таблице. При этом агрегируются строки по значению другой колонки (Grouping Column).

UNPIVOT выполняет обратное действие: преобразует столбцы в строки, фактически "нормализуя" данные из широкой таблицы в более узкую и длинную.

Пример PIVOT:

Предположим, есть таблица Sales с колонками Employee, Year, Amount.

Employee Year Amount
Alice 2020 100
Bob 2020 150
Alice 2021 120
Bob 2021 180

Использование PIVOT для получения годовых продаж по сотрудникам:

SELECT Employee, [2020], [2021]
FROM (
    SELECT Employee, Year, Amount
    FROM Sales
) AS SourceTable
PIVOT(
    SUM(Amount) -- Агрегирующая функция
    FOR Year IN ([2020], [2021]) -- Колонка, значения которой станут новыми колонками
) AS PivotTable;

Результат:

Employee 2020 2021
Alice 100 120
Bob 150 180

Пример UNPIVOT:

Предположим, есть таблица AnnualSales с колонками Employee, [2020], [2021].

Employee 2020 2021
Alice 100 120
Bob 150 180

Использование UNPIVOT для преобразования обратно в формат с колонками Year и Amount:

SELECT Employee, Year, Amount
FROM AnnualSales
UNPIVOT(
    Amount FOR Year IN ([2020], [2021]) -- Колонка для значения, колонка для имени исходных колонок
) AS UnpivotTable;

Результат:

Employee Year Amount
Alice 2020 100
Alice 2021 120
Bob 2020 150
Bob 2021 180

Оба оператора используются для упрощения запросов при работе с "широкими" или "узкими" таблицами, предоставляя более удобное для анализа или представления данных форматирование из реляционной структуры.