如何为SQL中的每个不同值迭代一个int列?

时间:2015-05-14 20:16:18

标签: sql sql-server cursor

我一直在尝试查询来更新我当前的数据库,但我无法弄清楚如何做到这一点。我一直在尝试使用游标,但我找不到隔离每一行的方法,也没有将不同列的所有行设置为相同的值。

以下是我在数据库中的内容:

def f(g):
    g['result'] = len(g)
    return g

df.groupby([df.i, df.j]).apply(f)

我希望它成为:

RecoNumber   Item
ABIBAQC-01   1
ABIBAQC-01   1
ABIBAQC-01   1
ABIBAQC-02   1
ABIBAQC-03   1
ABIBAQC-03   1

就像我说的那样,我已经尝试过使用光标,但我遗漏了一些让它正常工作的东西。

RecoNumber   Item
ABIBAQC-01   1
ABIBAQC-01   2
ABIBAQC-01   3
ABIBAQC-02   1
ABIBAQC-03   1
ABIBAQC-03   2

提前感谢任何提示。

1 个答案:

答案 0 :(得分:4)

您可以使用ROW_NUMBER()功能:

;WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY RecoNumber ORDER BY RecoNumber) AS UPD_Item
              FROM  YourTable
              )
UPDATE cte
SET Item = UPD_Item

ROW_NUMBER()函数为每一行分配一个数字。 PARTITION BY是可选的,但用于为给定字段或字段组中的每个值开始编号,即:如果您PARTITION BY Some_Date,那么对于每个唯一日期值,编号将从1开始。 ORDER BY当然用于定义计数应该如何进行,并且在ROW_NUMBER()函数中是必需的。

您可以SELECT * FROM cte在运行UPDATE之前先观察新值,您可能还有其他字段值ORDER BY