select中每行的sql生成多个插入到另一个表

时间:2014-10-22 21:53:54

标签: sql-server sql-server-2008 unpivot

有没有办法做到以下几点?

假设表A中的选择有几列如下:

id | value1 | value2 | value3
=============================
1  |  1.0   |  2.0   |  3.0
2  |  1.5   |  1.6   |  1.7

我想获取结果并插入另一个表(表B),如下所示:

tableAId | key    | value
=========================
1        | value1 |  1.0
1        | value2 |  2.0
1        | value3 |  3.0
2        | value1 |  1.5
2        | value2 |  1.6
2        | value3 |  1.7

有没有办法以一种插入选择方式执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以使用unpivot执行此操作:

-- insert into TableB (tableAId, key, value)
select id, [key], value 
from (
    select id, [key], value 
    from TableA
    unpivot (
       [Value] for [Key] in ([Value1],[Value2],[Value3])
    ) as unpvt
) derived

这列的名称是硬编码的,但如果需要,可以很容易地使其动态化。