Множественный UNPIVOT, возможен ли?
Имеется скрипт у которого на выходе одна строка с итогом и куча столбцов. Необходимо развернуть столбцы по группам. Пример выходных данных:
Пример того как должно получиться:
Получается только одна группа:
SELECT * FROM(/*здесь большой скрипт*/ )tt
UNPIVOT (
gr FOR title IN(18_a,18_b)
)unpvt
Как сделать разбиение по колонкам?
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Попробуйте следующие два решения для MS SQL Server.
Имена столбцов таблицы базы данных должны начинаться с букв.
SQL
-- DDL и образец вставки данных, начало
DECLARE @tbl TABLE (A_18 INT, A_19 int, B_18 INT, B_19 INT, C_18 INT, C_19 INT);
INSERT @tbl ( A_18, A_19, B_18, B_19, C_18, C_19) VALUES
( 20, 50, 20, 50, 32, 54);
-- DDL и образец вставки данных, конец
SELECT * FROM @tbl;
-- Метод #1
SELECT 18 AS Age, A_18 AS A, B_18 AS B, C_18 AS C
FROM @tbl
UNION ALL
SELECT 19, A_19, B_19, C_19
FROM @tbl
ORDER BY Age;
-- Метод #2
SELECT v.*
FROM @tbl
CROSS APPLY (VALUES
(18, A_18, B_18, C_18),
(19, A_19, B_19, C_19)
) AS v(Age, A, B, C)
ORDER BY v.Age;
Результат
Age | A | B | C |
---|---|---|---|
18 | 20 | 20 | 32 |
19 | 50 | 50 | 54 |