2017-09-02 73 views
0

如何添加标识号,以便在插入行时通过触发器分配增量号码如下所示:我正在使用SQL Server。SQL Server:标识按组列出

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 
+0

你在使用什么数据库? – Dalorzo

+0

MS SQL数据库 – Mansoor

+0

你是否也想过滤出id为3和9的行? – cars10m

回答

0

您可以创建一个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 

,然后设置DefaultValue对于NameId用于调用插入记录时的功能,如下所示:

ALTER TABLE YourTable ADD CONSTRAINT 
    DF_Identity_NameId DEFAULT ([dbo].[GetIdentityForName](Name)) FOR NameId 

假设YourTable是(IdNameNameId)。

我希望你:)

+0

欢迎您。所以你会将它标记为接受:) –

+0

是否有可能在同一个表中得到答案? – Mansoor

+0

你的意思是在不改变表格定义的情况下以'Query'的形式得到结果? –

1

没有理由为什么你要存储的值是有帮助的。你可以在需要时计算它:

select t.*, row_number() over (partition by name order by id) as nameId 
from t;