SQL查询;水平到垂直
Posted
技术标签:
【中文标题】SQL查询;水平到垂直【英文标题】:SQL query ; horizontal to vertical 【发布时间】:2012-09-19 19:44:03 【问题描述】:我遇到了一个涉及将水平行转换为垂直行的 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
。但它不工作!!!
谢谢!!!
【问题讨论】:
【参考方案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
或者UNPIVOT
:
select no, FlagsName, flag_value
from yourtable
unpivot
(
flag_value
for FlagsName in (Flag_1, Flag_2, Flag_3)
) u
见SQL Fiddle With Demo
【讨论】:
我喜欢使用 UNPIVOT,因为它读起来更好,也更简洁。那么,它们在性能方面如何比较?以上是关于SQL查询;水平到垂直的主要内容,如果未能解决你的问题,请参考以下文章