在SQL Server中使用Pivot,将两列作为主键

时间:2017-10-04 13:56:21

标签: sql-server pivot

我有一个这样的表,我使用code1code2作为主键。

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'中的列数是静态的,所以我可以随心所欲地转动。

2 个答案:

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