我有一个表 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
我该怎么做?
答案 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