Sql Server表中选定依赖字段的自动递增
问题: 是否可以自动完成“帮助”列(自动,无需人工干预) 如果(Login='MIPA'和'Number'中的'int'大于7))|条件 然后: 具有FolderID(varchar)的最小行 获取值1,随后的每个值都将获取值i=1,i++(即比前一个值大1,即2,3.4等) 最后看起来是这样的:Sql Server表中选定依赖字段的自动递增,sql,sql-server,ssms,Sql,Sql Server,Ssms,问题: 是否可以自动完成“帮助”列(自动,无需人工干预) 如果(Login='MIPA'和'Number'中的'int'大于7))|条件 然后: 具有FolderID(varchar)的最小行 获取值1,随后的每个值都将获取值i=1,i++(即比前一个值大1,即2,3.4等) 最后看起来是这样的: Type | Name -----------+------- varchar(31)| FolderId varchar(31)| Login int | Number
Type | Name
-----------+-------
varchar(31)| FolderId
varchar(31)| Login
int | Number
int | Help
FolderId| Login | Number| Help
-------+-------+-------+-----
1 | MIPA | 1 | NULL
4 | MIPA | 8 | 1
7 | MIPA | 8 | 2
9 | MIPA | 3 | NULL
...
15 | MIPA | 8 | 3
...
121 | RODO | 1 | NULL
124 | RODO | 8 | NULL
127 | RODO | 8 | NULL
129 | RODO | 3 | NULL
...
1215 | RODO | 1 | NULL
我做了什么
我从未坐在数据库中修改过它们的脚本,所以我不知道这样的操作是否可行
我使用Management Studio 2018您可以将其计算为:
select t.*,
(case when login = 'MIPA' and Number > 7
then row_number() over (partition by login, (case when number > 7 then 1 else 0 end)
FolderId
)
end) as new_help
from t;
如果要更新该值,请使用可更新的CTE:
with toupdate as (
select t.*,
row_number() over (partition by login order by FolderId) as new_help
from t
where login = 'MIPA' and number > 7
)
update toupdate
set help = new_help;
with toupdate as (
select t.*,
row_number() over (partition by login order by FolderId) as new_help
from t
where login = 'MIPA' and number > 7
)
update toupdate
set help = new_help;