2013-12-12 3 views
0

я хочу вставить несколько строк в нескольких столбцах в одном запросе с использованием два различных временных таблиц с именем #temp1, имеющими Col QID и #temp2 имея седловины 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 

Спасибо заранее:

+0

Вы в настоящее время выполняет перекрестное соединение. Нам нужно знать, какова структура ваших временных таблиц и как они соотносятся. – gvee

ответ

0

Вы можете использовать cross join для вставки строк NXM, где N это количество строк в # Temp1 и М число строк в # 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

Отсутствие двухзначного именования столбцов в исходном запросе Askers говорит мне, что 'RID' и' QID' не находятся в обеих таблицах. – gvee

+0

@ gvee: Хорошо, я отредактирую свой ответ – Andomar

+0

@Andomar: Спасибо за ответ, я попробовал даже перекрестное соединение, которое дает тот же результат. ПРИМЕЧАНИЕ: обе таблицы temp имеют только один столбец – Raj

1

В таблице # temp1 и # Temp2 не имеют общих столбцов, которые можно использовать КТР и 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

Да ... там, где не было столбца, я добавил row_numbers() в каждую таблицу temp и на основе данных, опубликованных на выборке. Msgstr "Увеличил QID с уменьшением МПОГ. – Deepshikha

+0

@deepshikha: Спасибо, что он работает, но есть проблема с рейтингом. Курс должен вставляться в заданном порядке, но он вставляет asc или des order. – Raj

Смежные вопросы