table Sql-Server 中所选依赖字段的自动递增
autoincrementation of selected dependent fields in the table Sql-Server
问题:
是否可以自动完成 "help" 列(自动,无需人工干预)?
if (Login = 'MIPA' AND 'int' in 'Number' is > 7 (greater than 7) ) |条件
然后:
带 FolderID (varchar) 的最小行
取值1,后面每一个取值i = 1,i++(即比前一个大1,即2、3.4等)
Type | Name
-----------+-------
varchar(31)| FolderId
varchar(31)| Login
int | Number
int | Help
FolderId| Login | Number| Help
-------+-------+-------+-----
1 | MIPA | 1 | NULL
4 | MIPA | 8 | NULL
7 | MIPA | 8 | NULL
9 | MIPA | 3 | NULL
...
15 | MIPA | 8 | NULL
...
121 | RODO | 1 | NULL
124 | RODO | 8 | NULL
127 | RODO | 8 | NULL
129 | RODO | 3 | NULL
...
1215 | RODO | 1 | NULL
所以最后看起来像这样:
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
我做了什么?
我从来没有在数据库中修改过他们的脚本,所以我不知道这样的操作是否可行
我使用 Managment 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;
问题:
是否可以自动完成 "help" 列(自动,无需人工干预)?
if (Login = 'MIPA' AND 'int' in 'Number' is > 7 (greater than 7) ) |条件
然后:
带 FolderID (varchar) 的最小行
取值1,后面每一个取值i = 1,i++(即比前一个大1,即2、3.4等)
Type | Name
-----------+-------
varchar(31)| FolderId
varchar(31)| Login
int | Number
int | Help
FolderId| Login | Number| Help
-------+-------+-------+-----
1 | MIPA | 1 | NULL
4 | MIPA | 8 | NULL
7 | MIPA | 8 | NULL
9 | MIPA | 3 | NULL
...
15 | MIPA | 8 | NULL
...
121 | RODO | 1 | NULL
124 | RODO | 8 | NULL
127 | RODO | 8 | NULL
129 | RODO | 3 | NULL
...
1215 | RODO | 1 | NULL
所以最后看起来像这样:
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
我做了什么?
我从来没有在数据库中修改过他们的脚本,所以我不知道这样的操作是否可行
我使用 Managment 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;