根据行号更新

Ari*_*ian 1 sql sql-server row-number sql-server-2008 sql-update

请考虑此表:

id       Col1         Col2
--------------------------
1        nima         null
18       john         null
25       sara         null
Run Code Online (Sandbox Code Playgroud)

我有一个选择,转发这个记录:

id         Col
---------------
1          LA
2          WA
3          FL
Run Code Online (Sandbox Code Playgroud)

我想用同样的顺序,你see.for例如更新来更新上面这个表记录LAnima和...

我怎么能这样做?

谢谢

Rom*_*kar 5

您可以根据row_number()以及更新SQL Server中的公用表表达式来更新,如下所示:

with cte1 as (
   select Col2, row_number() over(order by id) as rn
   from Table1
), cte2 as (
   select col, row_number() over(order by id) as rn
   from Table2
)
update c1 set
    Col2 = c2.col
from cte1 as c1
    left outer join cte2 as c2 on c2.rn = c1.rn
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo

请注意,如果您的表很大,性能可能不是很好.如果是这种情况,您可以考虑使用row_number列创建临时表,并使此列成为主键,只需创建适当的索引