我有下表:
ID Var1 Var2 Var3
------------------------
1 4 3 9
2 5 2 8
3 1 6 2
我想获得下表:
ID Score Variable
------------------------
1 4 Var1
1 3 Var2
1 9 Var3
2 5 Var1
2 2 Var2
2 8 Var3
3 1 Var1
3 6 Var2
3 2 Var3
非常感谢您的帮助!
非常感谢
答案 0 :(得分:0)
您可以使用全部合并
select id, var1, score 'var1' variable
from mytable
union all
select id, var2, 'var2'
from mytable
union all
select id, var3, 'var3'
from mytable
order by id, variable
答案 1 :(得分:0)
为此,我建议使用cross apply
:
select t.id, v.variable, v.score
from followingtable t cross apply
(values ('var1', t.var1), ('var2', t.var2), ('var3', t.var3)) v(variable, score);
还有另外两种(显而易见的)方法可以做到这一点。一个使用union all
。此方法的优点是仅扫描表一次。因此,该版本应该更快。如果您的“表”确实是一个复杂的子查询,则性能差异可能很重要。
另一种方法是unpivot
。 unpivot语法(尽管是标准的)仅处理一件事。 cross apply
-实现标准的 lateral 连接-更加强大。取消透视只是使用语法的多种方式之一。而且,这是学习横向连接的简便方法。
答案 2 :(得分:0)