使用SQL Server更新

时间:2013-08-14 09:35:46

标签: sql sql-server

我有一个表 TABLE1 ,可以通过以下方式显示:

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

现在我想使用 TABLE1 的值更新表 TABLE2

TABLE1 中的第1行值 TABLE2 中的第1行 TABLE1 中的第二行值 TABLE2 中的第二行 TABLE1 中的第3行值 TABLE3 中的第3行

像:

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

我该怎么做?

1 个答案:

答案 0 :(得分: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