RAS*_*RAS 4 sql sql-server-2008
我正在使用SQL Server 2008.
我有两个表:User_master和Item_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.
您可以使用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)