这是我现有的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我不能使用存储过程,只能使用一个查询。
答案 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)