将列转换为每个ID的行

时间:2016-12-22 15:00:12

标签: sql tsql transformation

我的表格如下所示

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中处理此问题的最佳方法是什么?

3 个答案:

答案 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