2013-09-24 89 views
0

我有一个select语句,我需要将它转换为Update语句。如何将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和列SEQ值是表CHK_SEQ 6,9,10。然后运行上述查询将SEQ的值更改为1,2,3,即new_seq_no。

任何人都可以请帮助我这个。

谢谢。

+2

什么RDBMS您使用的? – Quassnoi

+0

Oracle和SQL服务器 – user2810293

回答

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; 
+0

感谢您的回复,这个查询也会在Oracle中运行吗? – user2810293

+0

我不确定Oracle。尝试使用选择而不是更新,并让我们知道... – Kaf

+0

尝试执行查询时,我收到此错误SQL错误:executeQuery方法必须返回结果集。 – user2810293

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; 
+0

感谢您的回复。任何想法我怎么才能让它在Oracle中工作。 – user2810293

+0

试图执行查询时,我收到此错误SQL错误:executeQuery方法必须返回结果集 – user2810293

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;