sql для каждой строки в выборке создать несколько вставок в другую таблицу

Есть ли способ сделать следующее?

Предположим, что выбор из таблицы 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 ответ

Решение

Ты можешь использовать 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

В нем имена столбцов жестко закодированы, но при необходимости было бы легко сделать его динамическим.

Другие вопросы по тегам