Den enkleste (og sandsynligvis mest effektive) tilgang er at bruge ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
For sjov kan du også løse det på denne måde i SQL Server 2012. Hvis Date
er unik:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Eller mere enkelt:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Hvis Date
er ikke unik, og hvis du ikke ønsker bindinger (samme antal for identiske kombinationer af dato+kode), skal du bruge den dyrere ROWS
, som bruger på diskens spool:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Du vil måske prøve hver af disse muligheder på dit bord for at se, hvordan ydelsen er.