J'irais avec une colonne calculée pour PhraseVersion
, qui prendra le nombre de lignes avec le même PhraseID
et Id
inférieur ou égal à la ligne actuelle.
Pour ce faire, vous devez créer une UDF pour calculer la PhraseVersion :
CREATE FUNCTION dbo.GetPhraseVersion (
@PhraseId int,
@id int
)
RETURNS INT
AS
BEGIN
RETURN (
SELECT COUNT(*)
FROM T
WHERE PhraseId = @PhraseId
AND Id <= @id
)
END
GO
Ensuite, créez le tableau avec la colonne calculée :
CREATE TABLE T
(
id int identity(1,1),
PhraseId int,
PhraseVersion as dbo.GetPhraseVersion(PhraseId, id)
)
GO
Maintenant pour le test - insérez 4 enregistrements :
INSERT INTO T (PhraseId) VALUES(1),(1),(1),(2)
Sélectionnez :
SELECT *
FROM T
Résultats :
id PhraseId PhraseVersion
1 1 1
2 1 2
3 1 3
4 2 1
Vous pouvez voir une démo en direct sur rextester.