你可以使用DENSE_RANK功能,而不是ROW_NUMBER。
DECLARE @MyTable TABLE
(
Customer NVARCHAR(100) NOT NULL,
[Cycle] SMALLINT NOT NULL
);
INSERT @MyTable VALUES ('C1', 2010);
INSERT @MyTable VALUES ('C1', 2010);
INSERT @MyTable VALUES ('C1', 2011);
INSERT @MyTable VALUES ('C1', 2012);
INSERT @MyTable VALUES ('C1', 2012);
INSERT @MyTable VALUES ('C1', 2012);
INSERT @MyTable VALUES ('C2', 2010);
INSERT @MyTable VALUES ('C2', 2010);
SELECT t.Customer, t.[Cycle],
DENSE_RANK() OVER(PARTITION BY t.Customer ORDER BY t.[Cycle]) AS Rnk
FROM @MyTable t
ORDER BY Customer, [Cycle];
结果:
Customer Cycle Rnk
-------- ------ ---
C1 2010 1
C1 2010 1
C1 2011 2
C1 2012 3
C1 2012 3
C1 2012 3
C2 2010 1
C2 2010 1
SQL Fiddle
http://sqlfiddle.com/#!3/506c0/10 – Shiva