Pendekatan paling sederhana (dan mungkin paling efisien) adalah dengan menggunakan ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Untuk bersenang-senang, Anda juga dapat menyelesaikannya dengan cara ini di SQL Server 2012. Jika Date
unik:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Atau lebih sederhana:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Jika Date
tidak unik, dan jika Anda tidak menginginkan ikatan (jumlah yang sama untuk kombinasi tanggal+kode yang identik), Anda perlu menggunakan ROWS
yang lebih mahal , yang menggunakan spool pada disk:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Anda mungkin ingin mencoba setiap opsi ini di meja Anda untuk melihat seperti apa performanya.