Транспонирование таблицы SQL — это специфическое преобразование таблицы, после которого столбцы становятся строками, а строки — столбцами. Для такой манипуляции существуют специальные конструкции запросов, где используются операторы PIVOT и UNPIVOT. Использование этих операторов имеет довольно специфический синтаксис, но с точки зрения эффективности они отлично справляются с возложенной на них задачей.
Эти операторы хороши тем, что могут транспонировать небольшие данные, например, только одну строку или столбец таблицы. Но они также могут транспонировать всю таблицу целиком, то есть все столбцы со всеми строками.
Можно ли транспонировать таблицу SQL другими способами? Да, можно, но это будут сложные самодельные конструкции. Нет смысла заострять на них свое внимание, если для транспонирования присутствуют специальные операторы.
Транспонирование таблицы SQL
Чтобы лучше понять, как происходит транспонирование таблицы SQL, давайте разберем это действие на практике. Представим, что у вас есть некая SQL-таблица вот такого вида:
Дормидонт
Платон
Тимати
Аристарх
Красный
3
7
3
5
Зеленый
10
6
5
7
Голубой
4
4
11
3
Вам нужно транспонировать эту таблицу SQL таким образом, чтобы из нее получилась такая:
Красный
Зеленый
Голубой
Дормидонт
3
10
4
Платон
7
6
4
Тимати
3
5
11
Аристарх
5
7
3
Когда вы создаете такую таблицу в SQL, код будет следующий:
CREATE TABLE transTable([color] varchar(5), [Дормидонт] int, [Платон] int, [Тимати] int, [Аристарх] int);
INSERT INTO transTable
([color], [Дормидонт], [Платон], [Тимати], [Аристарх])
VALUES
('Красный', 3, 7, 3, 5),
('Зеленый', 10, 6, 5, 7),
('Голубой', 4, 4, 11, 3);
Транспонируем нашу SQL-таблицу с помощью специальной конструкции с применением операторов «pivot» и «unpivot». Код будет следующим:
select name, [Красный], [Зеленый], [Голубой]
from
(
select color, name, value
from transtable
unpivot
(
value for name in (Дормидонт, Платон, Тимати, Аристарх)
) unpiv
) src
pivot
(
sum(value)
for color in ([Красный], [Зеленый], [Голубой])
) piv
Заключение
Транспонирование таблицы SQL требуется достаточно редко. Транспонирование можно описать как процесс перевода столбцов в строки. Сегодня мы показали простейший, но эффективный способ, как транспонировать SQL-таблицу при помощи специальных операторов «pivot» и «unpivot».
Другое