Jeg ville gå med en beregnet kolonne for PhraseVersion
, der vil tage antallet af rækker med det samme PhraseID
og Id
lavere eller lig med den aktuelle række.
For at gøre det skal du oprette en UDF for at beregne 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
Opret derefter tabellen med den beregnede kolonne:
CREATE TABLE T
(
id int identity(1,1),
PhraseId int,
PhraseVersion as dbo.GetPhraseVersion(PhraseId, id)
)
GO
Nu til testen - indsæt 4 poster:
INSERT INTO T (PhraseId) VALUES(1),(1),(1),(2)
Vælg:
SELECT *
FROM T
Resultater:
id PhraseId PhraseVersion
1 1 1
2 1 2
3 1 3
4 2 1
Du kan se en live demo på rextester.