2017-09-02 75 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;