如何将多行插入到单个表的多列中

时间:2013-12-12 09:52:30

标签: sql sql-server-2008 stored-procedures

我想在单个查询中使用两个不同的临时表在多个列中插入多行,这两个临时表名为#temp1,其中col QID和#temp2具有col RID,我尝试这样

insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2

当我插入数据时,它看起来像这样

 ID  Quest   Rate
    2   1   5
    2   2   5
    2   3   5
    2   1   4
    2   2   4
    2   3   4
    2   1   3
    2   2   3
    2   3   3

但我想像这样插入

ID  Quest Rate
2   1   5
2   2   4
2   3   3

提前感谢:

2 个答案:

答案 0 :(得分:1)

由于表#temp1和#temp2没有公共列,您可以使用CTE和row_number()来获取所需的结果:

;WITH #temp1tbl (commonid, qid) 
     AS (SELECT Row_number() 
                  OVER( 
                    ORDER BY qid) AS CommonId, 
                qid 
         FROM   #temp1), 
     #temp2tbl (commonid, rid) 
     AS (SELECT Row_number() 
                  OVER( 
                    ORDER BY (SELECT 1)) AS CommonId, 
                rid 
         FROM   #temp2) 
INSERT INTO table1 
            (id, 
             quest, 
             rating) 
SELECT @ID, 
       qid, 
       rid 
FROM   #temp1tbl 
       LEFT OUTER JOIN #temp2tbl 
                    ON #temp1tbl.commonid = #temp2tbl.commonid 

答案 1 :(得分:0)

您可以使用cross join插入NxM行,其中N是#Temp1中的行数,M是#temp2中的行数:

insert into table1(ID, quetion, rating) 
select @ID, t1.QID, t2.RID 
from #Temp1 t1
cross join #Temp2 t2

如果两个临时表中的行都相关,请使用常规连接:

insert into table1(ID, quetion, rating) 
select @ID, t1.QID, t2.RID 
from #Temp1 t1
join #Temp2 t2
on t1.id = t2.id

这通常会插入少于NxM的行。