在另一个表中的每行在MS SQL表中创建多个行

时间:2015-08-21 13:28:55

标签: sql-server tsql

我有一个表,每行有一个唯一的ID,我有另一个表,其中有一列用于相同的ID以及其他一些。我想要做的是对于第一个表中的每一行,在第二个表中创建具有相同ID但手动设置的不同值的多个行。我只需要对现有数据进行一次性处理。类似的东西:

insert into person.rooms(personID, roomID, isDecorated)
values (personID, 0, 1),
       (personID, 1, 1),
       (personID, 2, 0),
       (personID, 3, 0)
select personID from person.rooms

感谢。

2 个答案:

答案 0 :(得分:0)

这里不需要values子句,但是多个UNION ALL select语句如下所示:

insert into person.rooms(personID, roomID, isDecorated)

select personID, 0, 1 from person.rooms
UNION ALL
select personID, 1, 1 from person.rooms
UNION ALL
select personID, 2, 0 from person.rooms
UNION ALL
select personID, 3, 0 from person.rooms

或者您可以使用CROSS APPLY这样的东西......

insert into person.rooms(personID, roomID, isDecorated)
SELECT C.personID, C.RoomID, C.isDecorated 
FROM person.rooms t
     CROSS APPLY (values (t.personID, 0, 1),
                         (t.personID, 1, 1),
                         (t.personID, 2, 0),
                         (t.personID, 3, 0) )c( personID,RoomID, isDecorated) 

答案 1 :(得分:0)

刚刚更改了TOP(100)中的数字,表示要插入的行数

Insert into SecondTable
Select PersonID, r_num RoomID, isDecorared from FirstTable
Cross Apply (select top(100) row_number() over(order by (Select NULL))-1 r_num
             from sys.all_objects A , sys.all_objects B) X
相关问题