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;