如何仅使用SQL将相关数字分配给行?

mmu*_*lva 2 sql oracle

我在Oracle数据库中有以下表:

InvoiceNumber InvoiceDate InvoiceCorrelative
------------- ----------- ------------------
          123  02-03-2009                  0
          124  02-03-2009                  0
          125  02-04-2009                  0
          126  02-04-2009                  0
          127  02-04-2009                  0
          128  02-05-2009                  0
          129  02-06-2009                  0
          130  02-06-2009                  0
          ...         ...                ...
Run Code Online (Sandbox Code Playgroud)

我想为InvoiceCorrelative每一行中的列设置一个值,以便为每个日期创建一个从1开始的数字序列.在上面的例子中,我希望表格如下所示:

InvoiceNumber InvoiceDate InvoiceCorrelative
------------- ----------- ------------------
          123  02-03-2009                  1
          124  02-03-2009                  2
          125  02-04-2009                  1
          126  02-04-2009                  2
          127  02-04-2009                  3
          128  02-05-2009                  1
          129  02-06-2009                  1
          130  02-06-2009                  2
          ...         ...                ...
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用SQL语句来执行此操作?我一直在玩rownum,但没有得到任何结果.

And*_*mar 10

尝试:

ROW_NUMBER() OVER (PARTITION BY InvoiceDate ORDER BY InvoiceNumber)
Run Code Online (Sandbox Code Playgroud)

  • 9i具有RANK(),DENSE_RANK()和ROW_NUMBER()分析函数.这三者之间的唯一区别是他们如何处理关系.ROW_NUMBER为每一行返回一个唯一值,任意断开关系.RANK给予联系相同的价值并跳过随后的价值,就像在竞技比赛中一样.如果首先出现平局,那么下一个竞争对手将获得第三名.DENSE_RANK消除了间隙,同时给出了相同的值,因此如果首先存在平局,则下一行的值为2. (3认同)

Cha*_*ana 5

使用标准SQL,

  Update TableName T Set
    InvoiceCorrelative = 
     (Select Count(*) From TableName 
      Where InvoiceDate = T.InvoiceDate
        And InvoiceNumber <= T.InvoiceNumber)
Run Code Online (Sandbox Code Playgroud)