2014-10-07 110 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