Mar*_*rcM 1 sql sql-server sql-server-2000
我需要更新一个表,以便同一“组”(示例中为“代码+颜色”)的行在该组中获得一个递增的数字。每个组的行应编号为1、2、3 ...
id | Code | Color |Required_New_field
--------------------------
1231 |001 |Red | 1
1232 |001 |Red | 2
1233 |002 |Red | 1
1234 |001 |Red | 3
1235 |001 |Blue | 1
1236 |002 |Red | 2
1237 |001 |Blue | 2
1238 |002 |Blue | 1
1239 |002 |Red | 3
...
Run Code Online (Sandbox Code Playgroud)
在示例中,Code = 001和Color = Red的行应分别获得1、2、3。
我尝试了使用子查询和“分组依据”的几种方法,但是我意识到这实际上不是正确的方法。
任何提示将不胜感激!
编辑: ROW_NUMBER()个答案很棒!可悲的是,我必须在旧的sql_server 2000版本上运行它。ROW_NUMBER()在2005年及更高版本上可用(有关详细信息,请参见此处)。还有其他选择吗?
您可以使用row_number()以下方法计算数字:
select t.*,
row_number() over (partition by code, color order by id) as required_new_field
from t;
Run Code Online (Sandbox Code Playgroud)
要进行更新,请使用可更新的CTE:
with toupdate as (
select t.*,
row_number() over (partition by code, color order by id) as seqnum
from t
)
update toupdate
set required_new_field = seqnum;
Run Code Online (Sandbox Code Playgroud)