【问题标题】:Get new Id + 1 for each group in SQL为 SQL 中的每个组获取新的 Id + 1
【发布时间】:2017-04-19 17:08:56
【问题描述】:

请帮助我找出一种从数据集中获取每个组的第一个数字 id 的方法,如果该 ID 尚未被使用...我什至不知道如何解释它,所以我会解释下来这里:

身份证 | Col1 | Col2 |价值 |数字 ------+--------+------+----------+------- 17525 |一个 |乙| 1086.00 | 1 17525 |一个 |乙| 1086.00 | 2 17525 |一个 |乙| 1086.00 | 3 17526 |一个 |乙| 1378.00 | 1 17526 |一个 |乙| 1378.00 | 2 17526 |一个 |乙| 1378.00 | 3 17527 |一个 |乙| 1498.00 | 1 17527 |一个 |乙| 1498.00 | 2 17527 |一个 |乙| 1498.00 | 3

我想得到这样的东西: 对于每个 Id 或值(无关紧要,相等),FIRST 数字,在 FIRST 已经从其他组中获取之后。

类似这样的:

身份证 | Col1 | Col2 |价值 |数字 ------+--------+------+----------+------- 17525 |一个 |乙| 1086.00 | 1 17526 |一个 |乙| 1378.00 | 2 17527 |一个 |乙| 1498.00 | 3

因此,对于第一个值 1086.00,我将采用数字 1,对于第二个值 1378.00,我将采用数字 2,因为 1 已经成为第一个值。

我尝试了 3 个小时,使用 ROW_NUMBER,不起作用,Recursion CTE 无法通过 Max Recursion Limit 100 错误。

请帮忙!

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您是否考虑过使用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 |
    +-------+------+------+---------+----+
    

    【讨论】:

    • 我认为您应该按价值订购。
    • @AlexanderSharovarov 也许吧。问题是“Id OR Value(无所谓,相等)”
    • 天啊...我坚持说,dense_rank() 在 SQL2008R2 中不受支持!我必须对此进行测试...非常感谢!!!
    • @SanRyu 乐于助人!
    猜你喜欢
    • 2016-01-12
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多