SQL查询; 水平到垂直

use*_*584 4 sql sql-server sql-server-2005 unpivot sql-server-2008

我坚持使用SQL查询(SQL Server),涉及将水平行转换为垂直行

以下是我的数据

No      Flag_1    Flag_2    Flag_3
---      ----      -----     -----
A         1         2         3
B         4         1         6
Run Code Online (Sandbox Code Playgroud)

转换后,表应该是

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
Run Code Online (Sandbox Code Playgroud)

对此有任何意见会有帮助吗?

我正试图ROW_NUMBER在分区上玩.但它不是以某种方式工作!

谢谢 !!!

Tar*_*ryn 12

你可以使用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
Run Code Online (Sandbox Code Playgroud)

或者UNPIVOT:

select no, FlagsName, flag_value
from yourtable
unpivot
(
    flag_value
    for FlagsName in (Flag_1, Flag_2, Flag_3)
) u
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle With Demo