1

請幫助我找出從數據集中獲取每個組的第一個數字ID的方法如果Id尚未被採用......我甚至沒有知道要解釋它,所以我會在這裏解釋下:在SQL中爲每個組獲取新的Id + 1

 
Id | Col1 | Col2 | Value | Number 
------+-------+------+----------+------- 
17525 | A  | B | 1086.00 | 1 
17525 | A  | B | 1086.00 | 2 
17525 | A  | B | 1086.00 | 3 
17526 | A  | B | 1378.00 | 1 
17526 | A  | B | 1378.00 | 2 
17526 | A  | B | 1378.00 | 3 
17527 | A  | B | 1498.00 | 1 
17527 | A  | B | 1498.00 | 2 
17527 | A  | B | 1498.00 | 3 

我想是這樣的: 對於每個ID或價值(無所謂,都是平等的)第一個數字,第一個後已經從另一組中取出。

事情是這樣的:

 
Id | Col1 | Col2 | Value | Number 
------+-------+------+----------+------- 
17525 | A  | B | 1086.00 | 1 
17526 | A  | B | 1378.00 | 2 
17527 | A  | B | 1498.00 | 3 

所以對於第一個值,1086.00我要號碼1,爲第二個值1378.00我將採取2號,因爲1已經採取是第一值。

我試了3個小時,ROW_NUMBER不起作用,遞歸CTE無法通過Max遞歸極限100錯誤。

請幫助!

謝謝。

回答

2

你有沒有使用dense_rank()認爲:

select distinct Id, Col1, Col2, Value 
    , dr = dense_rank() over (order by Id) 
from t 

回報:

+-------+------+------+---------+----+ 
| Id | Col1 | Col2 | Value | dr | 
+-------+------+------+---------+----+ 
| 17525 | A | B | 1086,00 | 1 | 
| 17526 | A | B | 1378,00 | 2 | 
| 17527 | A | B | 1498,00 | 3 | 
+-------+------+------+---------+----+ 
+0

我覺得你應該通過價值秩序。 –

+0

@AlexanderSharovarov也許。問題說「Id或值(無所謂,相等)」 – SqlZim

+0

Omg ...我認爲在SQL2008R2中不支持dense_rank()!我必須測試這個...非常感謝你! – SanRyu