T-SQL中的分区等级

时间:2014-10-07 14:14:31

标签: sql tsql

鉴于下表:

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),但这并没有解决问题,因为它会重置每个分区的计数,这不是我想要的。

1 个答案:

答案 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