Phương pháp đơn giản nhất (và có lẽ là hiệu quả nhất) là sử dụng ROW_NUMBER()
:
SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTableName
ORDER BY [Date];
Để giải trí, bạn cũng có thể giải quyết nó theo cách này trong SQL Server 2012. If Date
là duy nhất:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
RANGE UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Hay đơn giản hơn:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
FROM dbo.YourTable
ORDER BY [Date];
Nếu Date
không phải là duy nhất và nếu bạn không muốn các mối quan hệ (cùng số lượng cho các kết hợp ngày + mã giống hệt nhau), bạn cần sử dụng ROWS
đắt hơn , sử dụng trên bộ đệm trên đĩa:
SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
ROWS UNBOUNDED PRECEDING)
FROM dbo.YourTable
ORDER BY [Date];
Bạn có thể muốn thử từng tùy chọn này trên bảng của mình để xem hiệu suất như thế nào.