SQL-запрос; горизонтальный в вертикальный

Я застрял с запросом SQL (SQL Server), который включает преобразование горизонтальных строк в вертикальные строки

Ниже мои данные

No      Flag_1    Flag_2    Flag_3
---      ----      -----     -----
A         1         2         3
B         4         1         6

После преобразования таблица должна быть

No     FlagsName    Flag_value
--      ----        ----------
A        Flag_1        1
A        Flag_2        2  
A        Flag_3        3
B        Flag_1        4
B        Flag_2        1
B        Flag_3        6

Любой вклад в это был бы полезен?

Я пытаюсь поиграть с ROW_NUMBER над разделом. но как-то не работает!!!

Спасибо !!!


person user1141584    schedule 19.09.2012    source источник


Ответы (1)


Вы можете использовать UNION ALL:

select No, 'Flag_1' as FlagName, Flag_1 as Flag_Value
from yourtable
union all
select No, 'Flag_2' as FlagName, Flag_2 as Flag_Value
from yourtable
union all
select No, 'Flag_3' as FlagName, Flag_3 as Flag_Value
from yourtable

Or an UNPIVOT:

select no, FlagsName, flag_value
from yourtable
unpivot
(
    flag_value
    for FlagsName in (Flag_1, Flag_2, Flag_3)
) u

См. скрипт SQL с демонстрацией.

person Taryn    schedule 19.09.2012
comment
Мне нравится использовать UNPIVOT, так как он лучше читается и лаконичен. Итак, как они соотносятся друг с другом по производительности? - person Avid Programmer; 02.03.2020