Nejjednodušší (a pravděpodobně nejúčinnější) přístup je použít ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Pro zábavu to můžete také vyřešit tímto způsobem v SQL Server 2012. Pokud Date
je unikátní:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Nebo jednodušeji:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Pokud Date
není unikátní, a pokud nechcete vazby (stejný počet pro identické kombinace datum+kód), musíte použít dražší ROWS
, který používá on-disk spool:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Možná budete chtít vyzkoušet každou z těchto možností na vašem stole, abyste viděli, jaký je výkon.