インクリメンタルIDを含むテーブルを作成する必要がありますが、IDは他の列に従って自動的に分割されます。ここで私が欲しいものです:私はincrementalId
が自動的にカテゴリごとに増分され、挿入された新しいカテゴリの1から再起動することにしたい意味他の列でセグメント化された自動インクリメント列を作成する方法
myKey category incrementalId
----------- ----------- -------------
1 100 1
2 200 1
3 100 2
4 100 3
5 100 4
6 200 2
:
CREATE TABLE dbo.MyTable (
myKey INT IDENTITY PRIMARY KEY,
category INT,
incrementalId INT
);
INSERT INTO dbo.MyTable (category) VALUES (100);
INSERT INTO dbo.MyTable (category) VALUES (200);
INSERT INTO dbo.MyTable (category) VALUES (100);
INSERT INTO dbo.MyTable (category) VALUES (100);
INSERT INTO dbo.MyTable (category) VALUES (100);
INSERT INTO dbo.MyTable (category) VALUES (200);
SELECT *
FROM dbo.MyTable;
私はこのようなものを表示したいと思います。私はこれをテーブル内の任意のインサートで実行する必要があります(このテーブルに挿入するときに覚えておく必要はありません)。
私はこれがウィンドウ関数とトリガーかもしれないと思いますが、私は方法を理解できません。
EDIT:
私はデータは、データの削除が発生した場合にシフトすることがincrementalIdを避けるために、永続化したいと思います。また、理想的には、同じIDが列削除の場合に再指定されません(シーケンスまたはIDENTITYと同じ方法)
ご存知ですか?
カテゴリは無制限ですか? – scsimon
@scsimonはい、いつでも追加できます。今日は50、次の月には55などがあります。 – MaxiWheat
おそらくちょうど更新するより速く、インサートIMHOのロジックを処理する方が速いでしょう。 – scsimon