SQL 服务器:按组标识列
SQL Server : Identity column by group
如何添加标识号,以便在插入行时由触发器分配如下增量编号?我正在使用 SQL 服务器。
1 AAA
2 AAA
3 BBB
4 CCC
5 CCC
6 CCC
7 DDD
8 DDD
9 EEE
....
我想将其转换为:
1 AAA 1
2 AAA 2
4 CCC 1
5 CCC 2
6 CCC 3
7 DDD 1
8 DDD 2
您可以创建一个 FUNCTION
获取名称并为给定参数提供 MAX
身份:
CREATE FUNCTION [dbo].[GetIdentityForName] (@Name VARCHAR(MAX))
RETURNS INT
AS
BEGIN
RETURN
(SELECT ISNULL(MAX(NameId),0)+1
FROM YourTable
WHERE Name = @Name);
END
然后为 NameId
设置 DefaultValue
以便在插入记录时调用函数,如下所示:
ALTER TABLE YourTable ADD CONSTRAINT
DF_Identity_NameId DEFAULT ([dbo].[GetIdentityForName](Name)) FOR NameId
假设 YourTable
是 (Id
, Name
, NameId
).
希望对你有所帮助:)
没有理由必须存储该值。您可以在需要时计算它:
select t.*, row_number() over (partition by name order by id) as nameId
from t;
如何添加标识号,以便在插入行时由触发器分配如下增量编号?我正在使用 SQL 服务器。
1 AAA
2 AAA
3 BBB
4 CCC
5 CCC
6 CCC
7 DDD
8 DDD
9 EEE
....
我想将其转换为:
1 AAA 1
2 AAA 2
4 CCC 1
5 CCC 2
6 CCC 3
7 DDD 1
8 DDD 2
您可以创建一个 FUNCTION
获取名称并为给定参数提供 MAX
身份:
CREATE FUNCTION [dbo].[GetIdentityForName] (@Name VARCHAR(MAX))
RETURNS INT
AS
BEGIN
RETURN
(SELECT ISNULL(MAX(NameId),0)+1
FROM YourTable
WHERE Name = @Name);
END
然后为 NameId
设置 DefaultValue
以便在插入记录时调用函数,如下所示:
ALTER TABLE YourTable ADD CONSTRAINT
DF_Identity_NameId DEFAULT ([dbo].[GetIdentityForName](Name)) FOR NameId
假设 YourTable
是 (Id
, Name
, NameId
).
希望对你有所帮助:)
没有理由必须存储该值。您可以在需要时计算它:
select t.*, row_number() over (partition by name order by id) as nameId
from t;