我有一个这样的表,我使用code1
和code2
作为主键。
Code1 Code2 Data1 Data2 Data3
11 0 a b 7
11 1 b b 6
12 2 z v 5
我想将表格转换成:
Code1 Code2 TheData (create id ?)
11 0 a 0
11 0 b 1
11 0 7 2
11 1 b 0
11 1 b 1
11 1 6 2
12 2 z 0
12 2 v 1
12 2 5 2
我想添加一个id因为我丢失了我插入的数据的信息。
稍后在SQl中我将使用id来检索好的数据,但这不是问题。 'temp'中的列数是静态的,所以我可以随心所欲地转动。
答案 0 :(得分:3)
您可以使用union all
:
select code1, code2, data1 as thedata, 0 as new_id from temp
union all
select code1, code2, data2 as thedata, 1 from temp
union all
select code1, code2, data3 as thedata, 2 from temp;
如果您确实希望按照指定的顺序显示结果,请使用order by 1, 2, 4
。
答案 1 :(得分:0)
使用UNPIVOT更清晰,更高效,请确保以列格式转换值。
SELECT Code1, Code2, Value, Idname
FROM
(SELECT Code1, Code2,
CAST (Data1 AS varchar) AS Data1,
CAST (Data2 AS varchar) AS Data2, CAST (Data3 AS varchar) AS Data3
FROM @table
) temp
UNPIVOT
(
Value FOR Idname IN (Data1,
Data2, Data3)
) as Result