2013-08-14 3 views
0

У меня есть одна таблица, TABLE1, которые могут быть представлены:UPDATE с помощью SQL Server

select * from TABLE1 order by id_conv 

Такие, как:

id_conv 
======= 
200 
201 
202 

Другой стол TABLE2, которые могут быть представлены:

select * from TABLE2 order by id 

таких как:

id | id_conv 
============ 
1 | NULL 
2 | NULL 
3 | NULL 

Теперь я хочу, чтобы обновить таблицу TABLE2 со значениями TABLE1.

1-е значение строки в TABLE1 к 1-й строки в table2
2-го значения строки в TABLE1 на 2-ю строку в table2
3 значения строки в TABLE1 к 3-й строке в Table3

как:

id | id_conv 
============ 
1 | 200 
2 | 201 
3 | 202 

Как я могу это сделать?

+1

Почему 'a' пойти' 1', а не '2' или' 3 '? – GSerg

+0

Это, очевидно, не настоящие данные. Какова связь между id и id_conv? – Raj

+0

@GSerg Я хочу только первое значение строки в таблице 1 для первой строки в TABLE2 – stevey

ответ

3

Использование ROW_NUMBER() функции можно назначить номера на основе требуемого упорядочения для обеих таблиц и присоединиться на ней обновления

WITH CTE_Table1 AS 
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY id_conv) RN --set desired ordering 
    FROM Table1 
) 
,CTE_Table2 AS 
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY id) RN --set desired ordering 
    FROM Table2 
) 
UPDATE t2 
SET t2.id_conv = t1.id_conv 
FROM CTE_Table1 t1 
INNER JOIN CTE_Table2 t2 on t1.RN = t2.RN 
Смежные вопросы