相关查询有关问题

相关查询问题
现在有如下表,
id a
1 3
2 1
3 AB
4 4
5 AB
6 AB
7 5
8 AB
9 AB
10 4
11 AB
12 AB
13 AB
14 1
15 AB
16 AB
源码:

IF OBJECT_ID('test') IS NOT NULL
DROP TABLE test;
GO
CREATE TABLE test
(id INT IDENTITY,
 a VARCHAR(10));
INSERT INTO test VALUES ('3');
INSERT INTO test VALUES ('1');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('4');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('5');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('4');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('1');
INSERT INTO test VALUES ('AB');
INSERT INTO test VALUES ('AB');

SELECT * FROM test;

现在要实现查询出AB按顺序重复的次数,如下表的结果:
id a 重复次数
3 AB 1
5 AB 2
6 AB 2
8 AB 3
9 AB 3
11 AB 4
12 AB 4
13 AB 4
15 AB 5
16 AB 5

请问高手这查询语句该怎么样写啊???想了好久都没想出来
------解决思路----------------------
;WITH CTE AS(
SELECT *
,ROW_NUMBER()OVER(PARTITION BY a ORDER BY id)RN
FROM test
)
SELECT id,a
,DENSE_RANK()OVER(ORDER BY id-RN)[重复次数]
FROM CTE
WHERE a='AB'