我在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)
使用标准SQL,
Update TableName T Set
InvoiceCorrelative =
(Select Count(*) From TableName
Where InvoiceDate = T.InvoiceDate
And InvoiceNumber <= T.InvoiceNumber)
Run Code Online (Sandbox Code Playgroud)