SQL查询;水平到垂直

标签 sql sql-server sql-server-2008 sql-server-2005 unpivot

我遇到了涉及将水平行转换为垂直行的 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 。但不知何故它不起作用!!!

谢谢!!!

最佳答案

您可以使用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

关于SQL查询;水平到垂直,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501766/

相关文章:

sql - 从 Oracle 中提取每天特定时间加载的记录

mysql - 每日、每月或每年报告列出新老用户的 Access 情况

sql - 如何将执行结果分配给sql变量?

XML 解析 : line 1, 字符 23,非法名称字符

performance - "SELECT COUNT(column)"比 "SELECT COUNT(*)"快/慢吗?

sql - 使用 Postgres 限制 Rails 中的 SQL 结果

使用 CASE 语句的 SQL UPDATE 产生不完整的结果

sql-server - 将日期部分作为参数从表发送到 sql server 中的 DATEADD 函数

sql-server - SQL Server - 该日志备份中有什么?

sql - 如何检查字符串是否为空?