2013-12-12 47 views
0

我想用具有含山坳RID山坳QID和#temp2命名#temp1两个不同的临时表中插入在单个查询多列多行,我想这样的如何插入多行成单表的多个列

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 

预先感谢:

+0

您正在执行交叉连接。我们需要知道您的临时表的结构,以及它们如何与 – gvee

回答

0

你可以使用cross join插入N×M个行,其中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行。

+1

在提问者初始查询命名列缺少两部分的建议,我认为'RID'和'QID'不都是表所示。 – gvee

+0

@gvee:好一点,我将修改我的答案 – Andomar

+0

@Andomar:感谢响应我想即使交叉连接即给予同样的结果注:这两个临时表中有一列只有 – Raj

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 
+0

+1好主意,但假定增加QID匹配增加的RID,但情况可能并非如此。 – Andomar

+0

Yeah..as有没有共同的第i列加row_numbers()到每个临时表和基于发布样本数据..mapped增加QID的随RID的。 – Deepshikha

+0

@deepshikha:谢谢你它的工作,但评级有问题。费率应按给定顺序插入,但插入asc或des命令。 – Raj