代码之家  ›  专栏  ›  技术社区  ›  mmutilva

如何只使用SQL将相关编号分配给行?

  •  2
  • mmutilva  · 技术社区  · 16 年前

    我在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语句 ?我一直在和罗纳姆玩,但什么也没得到。

    2 回复  |  直到 14 年前
        1
  •  10
  •   Andomar    16 年前

    尝试:

    ROW_NUMBER() OVER (PARTITION BY InvoiceDate ORDER BY InvoiceNumber)
    
        2
  •  5
  •   Charles Bretana    14 年前

    使用标准SQL,

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