2017-09-02 21 views
0

ID番号を追加すると、行が挿入されたときに、増分番号がトリガによって次のように割り当てられます。私はSQL Serverを使用しています。SQL Server:グループ別のID列

1 AAA 
2 AAA 
3 BBB 
4 CCC 
5 CCC 
6 CCC 
7 DDD 
8 DDD 
9 EEE 
.... 

そして、私はそれを変換したい:あなたが名前を取得し、与えられたパラメータにMAXアイデンティティを与えるFUNCTIONを作成することができ

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

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;