Dir*_*hse -1 sql t-sql sql-server window-functions
如何在 SQL Server 中针对关键字重置计数器?在以下数据中,每次找到字符串 'A' 时,计数器都需要重置为 1:
Item Date
A 01.01.2019
B 02.01.2019
C 03.01.2019
D 04.01.2019
A 05.01.2019
B 06.01.2019
A 07.01.2019
B 08.01.2019
C 09.01.2019
D 10.01.2019
E 11.01.2019
A 12.01.2019
A 13.01.2019
A 14.01.2019
B 15.01.2019
Run Code Online (Sandbox Code Playgroud)
每次A找到我都需要重置计数器:
Count Item Date
1 A 01.01.2019
2 B 02.01.2019
3 C 03.01.2019
4 D 04.01.2019
1 A 05.01.2019
2 B 06.01.2019
1 A 07.01.2019
2 B 08.01.2019
3 C 09.01.2019
4 D 10.01.2019
5 E 11.01.2019
1 A 12.01.2019
1 A 13.01.2019
1 A 14.01.2019
2 B 15.01.2019
Run Code Online (Sandbox Code Playgroud)
就像是:
WITH cte AS (
SELECT *, COUNT(CASE WHEN Item = 'A' THEN 1 END) OVER (ORDER BY Date) AS GroupNum
FROM t
)
SELECT *, ROW_NUMBER() OVER (PARTITION BY GroupNum ORDER BY Date) AS [Count]
FROM cte
ORDER BY Date
Run Code Online (Sandbox Code Playgroud)
cte 为每行分配一个运行计数,每次A遇到时都会增加。行是ROW_NUMBER()基于此计数器分配的。