De eenvoudigste (en waarschijnlijk meest efficiënte) benadering is het gebruik van ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Voor de lol kun je het ook op deze manier oplossen in SQL Server 2012. Als Date
is uniek:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Of eenvoudiger:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Als Date
is niet uniek, en als je geen banden wilt (hetzelfde aantal voor identieke combinaties van datum+code), moet je de duurdere ROWS
gebruiken , die op de spool op de schijf gebruikt:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
U kunt elk van deze opties op uw tafel proberen om te zien hoe de uitvoering is.