SQL Server表转换查询/使用值组合列名称

时间:2015-11-04 23:16:59

标签: sql sql-server

这是我现有的SQL表,包含3列(q1,q2,q3)和2行:

> q1 q2 q3
> --------
> 1  2  3
> 4  5  6

我需要一个SQL查询来转换该表并返回一个包含2个新列(cg,sg)的结果集和6个将表列名与值组合在一起的行:

> cg  sg
> ======
> q1  1
> q1  4
> q2  2
> q2  5
> q3  3
> q3  6

也许这需要某种“PIVOT”操作,但经过多次尝试后我无法让它工作。

任何建议或解决方案?感谢。

PS我不能使用存储过程,只能使用一个查询。

2 个答案:

答案 0 :(得分:1)

您可以使用UNION执行此操作:

SELECT 'q1' as cg, q1 as sg FROM t1
UNION SELECT 'q2' as cg, q2 as sg FROM t1
UNION SELECT 'q3' as cg, q3 as sg FROM t1

答案 1 :(得分:0)

这是另一种只扫描一次表的方法。

SELECT
   x.*
FROM tbl t
CROSS APPLY( VALUES
    ('q1', q1),
    ('q2', q2),
    ('q3', q3)
) x(cg, sg)