2011-08-05 77 views
5

SQL Server 2005的TSQL - 自動遞增在UPDATE語句

我有一個包含以下內容的表: -

[order_id]  [index_1] 
600020001  0 
600020002  0 
600020002  0 
600020002  0 
600020003  0 
... 

需要被更新爲: -

[order_id]  [index_1] 
600020001  1 
600020002  1 
600020002  2 
600020002  3 
600020003  1 

我我試圖編寫一個UPDATE語句來填充index_1字段,如上例所示。我可以使用CURSOR來實現這個目標,但理想情況下,如果可能的話,我會盡量做到這一點。

對於每個新的order_id,重新編號。對於每個order_id行,index_1字段會加1。

是否可以在沒有光標的情況下執行此操作?

回答

13

您可以使用CTErow_number()來做你想做的。下面代碼中的表@T僅供演示。將@T替換爲您調用的任何表。

declare @T table ([order_id] int, [index_1] int) 

insert into @T values 
(600020001,  0), 
(600020002,  0), 
(600020002,  0), 
(600020002,  0), 
(600020003,  0) 

;with cte as 
(
    select index_1, 
     row_number() over(partition by order_id order by (select 1)) as rn 
    from @T  
) 
update cte 
    set index_1 = rn 

select * 
from @T 

結果:

order_id index_1 
----------- ----------- 
600020001 1 
600020002 1 
600020002 2 
600020002 3 
600020003 1 
+1

1爲使用'ROW_NUMBER()以上(由分區..)'。適合這裏的手套。 –

+0

謝謝。達到我想要的目標。 –