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

时间:2009-12-07 20:43:51

标签: 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
          ...         ...                ...

我想为每一行中的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
          ...         ...                ...

是否可以仅使用SQL语句?我一直在玩rownum,但没有到达任何地方。

2 个答案:

答案 0 :(得分:10)

尝试:

ROW_NUMBER() OVER (PARTITION BY InvoiceDate ORDER BY InvoiceNumber)

答案 1 :(得分:5)

使用标准SQL,

  Update TableName T Set
    InvoiceCorrelative = 
     (Select Count(*) From TableName 
      Where InvoiceDate = T.InvoiceDate
        And InvoiceNumber <= T.InvoiceNumber)