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
В нем имена столбцов жестко закодированы, но при необходимости было бы легко сделать его динамическим.