如何根据SQL中先前的Row值增加Column的值

RAS*_*RAS 4 sql sql-server-2008

我正在使用SQL Server 2008.

我有两个表:User_masterItem_master.

有一个user_id = 10 的用户.

|---------|
| user_id |
|---------|
|   10    |
|---------|
Run Code Online (Sandbox Code Playgroud)

item_id = 20至24 有5件商品.

|---------|---------|------------|
| item_id | user_id | item_order |
|---------|---------|------------|
|   20    |    10   |     0      |
|---------|---------|------------|
|   21    |    10   |     0      |
|---------|---------|------------|
|   22    |    10   |     0      |
|---------|---------|------------|
|   23    |    10   |     0      |
|---------|---------|------------|
|   24    |    10   |     0      |
|---------|---------|------------|
Run Code Online (Sandbox Code Playgroud)

Item_master中还有一列是item_order(int).我想在所有这些行中只使用单个查询将item_order = 0放到4.

可能吗?

编辑:

item_id不应该是有序的.

例如,而不是20,21,22,23,24; 它可能是20,25,31,47,58.

And*_*mar 7

您可以使用row_number()窗口函数为每行指定一个递增的数字user_id.子查询是必需的,因为您不能直接在set子句中使用窗口函数.

update  im
set     im.item_order = im.rn
from    (
        select  row_number() over (partition by user_id
                                   order by item_id) - 1 as rn
        ,       *
        from    item_master
        ) as im;
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle的实例.