鉴于下表:
CREATE TABLE #values (ID int, TYPE nchar(2), NUMBER int)
INSERT INTO #values values (1, 'A', 0)
INSERT INTO #values values (2, 'A', 0)
INSERT INTO #values values (3, 'B', 1)
INSERT INTO #values values (4, 'A', 1)
INSERT INTO #values values (5, 'B', 2)
SELECT * FROM #values
我想生成这个表:
Id | T | N | COUNT
------------------
1 | A | 0 | 1000
2 | A | 0 | 1000
3 | B | 1 | 1001
4 | A | 1 | 1002
5 | B | 2 | 1003
如何在T-SQL中执行此操作?
我一直在摆弄ROW_NUMBER() OVER(PARTITION BY)
,但这并没有解决问题,因为它会重置每个分区的计数,这不是我想要的。
答案 0 :(得分:4)
我认为你正在寻找dense_rank
:
SELECT
ID,
TYPE,
NUMBER,
DENSE_RANK() over (order by TYPE, Number)
FROM #values
这会产生
1 A 0 1
2 A 0 1
4 A 1 2
3 B 1 3
5 B 2 4