在SQL中为每个组获取新的Id + 1

时间:2017-04-19 17:08:56

标签: sql sql-server group-by sql-server-2008-r2 common-table-expression

请帮我弄清楚一种从数据集中获取每个组的第一个数字ID的方法如果尚未采用Id ...我甚至不知道解释它,所以我将向下解释这里:

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 OR值(无关紧要,相同),FIRST号码,在FIRST已从另一组中取出后。

这样的事情:

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 Recursion Limit 100错误。

请帮助!

感谢。

1 个答案:

答案 0 :(得分: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 |
+-------+------+------+---------+----+