Как назначить корреляционные номера для строк только с использованием SQL - PullRequest
2 голосов
/ 07 декабря 2009

У меня есть следующая таблица в базе данных 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 ]

10 голосов
/ 07 декабря 2009

Попробуйте:

ROW_NUMBER() OVER (PARTITION BY InvoiceDate ORDER BY InvoiceNumber)
5 голосов
/ 07 декабря 2009

Используя стандартный SQL,

  Update TableName T Set
    InvoiceCorrelative = 
     (Select Count(*) From TableName 
      Where InvoiceDate = T.InvoiceDate
        And InvoiceNumber <= T.InvoiceNumber)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...