我的表格如下所示
ID | value1 | value2 | value3
1 | 5 | 6 | 7
2 | 10 | 11 | 12
3 | 20 | 21 | 22
我需要为每个ID
的3个值列中的每一个创建一行。最终的表应该是这样的(列标题不再有意义,但你可以忽略它):
ID | value1 | value2
1 | value1 | 5
1 | value2 | 6
1 | value3 | 7
2 | value1 | 10
2 | value2 | 11
2 | value3 | 12
3 | value1 | 20
3 | value2 | 21
3 | value3 | 22
在TSQL中处理此问题的最佳方法是什么?
答案 0 :(得分:4)
您需要取消您可以使用CROSS APPLY
的数据
Select Id,cs.name,cs.values_list from yourtable
cross apply (values ('value1',value1),
('value2',value2),
('value3',value3)) Cs (name,values_list)
答案 1 :(得分:0)
Unpivot operator
select id,value1,value2
from t unpivot (value2 for value1 in (value1,value2,value3)) u
答案 2 :(得分:0)
您可以使用unpivot。
从中选择ID,vals,val (从堆栈中选择*)stc UNPIVOT (val中的val(value1,value2,value3) )as vals1