0

次のように表示できるテーブルTABLE1が 1 つあります。

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の値で更新します。

TABLE1の1 行目の値からTABLE2 の 1 行目の値TABLE1の 2
行目の値からTABLE2の 2 行目までTABLE1の3行目の 値からTABLE3 の3 行目の値

お気に入り:

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

どうすればいいですか?

4

1 に答える 1

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
于 2013-08-14T09:43:11.553 に答える