2013-09-24 96 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;