0

我有一个 select 语句,我需要将其转换为 Update 语句。

SELECT GUID,seq original_seq_no, ROW_NUMBER()
OVER ( PARTITION BY GUID ORDER BY seq) AS new_seq_no
FROM CHK_SEQ;

上述查询的实际作用是,假设我有多个具有唯一 GUID 的记录,并且表 CHK_SEQ 中的 SEQ 列的值为 6、9、10。然后运行上述查询将 SEQ 的值更改为 1,2,3,即 new_seq_no。

谁能帮我解决这个问题。

谢谢。

4

3 回答 3

1

试试这个(Sql-Server 2005 及更高版本):

With cte as (
  Select GUID,seq, row_number() over ( partition by GUID order by seq) AS new_seq_no
  From CHK_SEQ
)
Update c
Set c.seq = new_seq_no
From CHK_SEQ c 
     Join cte on c.Guid = cte.Guid and c.seq = cte.seq;
于 2013-09-24T09:18:46.867 回答
0
merge into CHK_SEQ 
using
    SELECT rowid as rid, 
           ROW_NUMBER() OVER (PARTITION BY GUID ORDER BY seq) AS new_seq_no
    FROM CHK_SEQ
) t on (chk_seq.rowid = t.rid)
when matched then update
   set seq = new_seq_no;
于 2013-09-24T09:52:56.737 回答
0

尝试这个,

with cte 
AS
(
SELECT GUID,seq original_seq_no, ROW_NUMBER()
OVER ( PARTITION BY GUID ORDER BY seq) AS new_seq_no
FROM CHK_SEQ
)

update  CHK_SEQ
set     CHK_SEQ.seq = r.new_seq_no
from    cte r
where CHK_SEQ.seq = r.original_seq_no AND CHK_SEQ.GUID= r.GUID;
于 2013-09-24T09:21:19.480 回答