2014-10-07 111 views
2

分区的假设表格如下:排名在T-SQL

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

+3

你能否更详细一点解释背后的“数”的逻辑不是“这并不能解决问题” ? – 2014-10-07 14:21:24

+1

@ mo5470:你是否希望按类型计数,以便计算多少种类型,或者您希望按类型和数量计数?一旦你的答案可以提供更多的帮助,但认为你可以做一个GROUP BY - 例如: SELECT [Type],[Number],Count([Number])AS aCount FROM #values GROUP BY [Type], [数]; – PCPGMR 2014-10-07 14:24:05

+0

@PCPGMR,我想要按类型和编号计数。 – mo5470 2014-10-07 14:39:15

回答

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