ОБНОВЛЕНИЕ ТАБЛИЦЫ С ПОСЛЕДОВАТЕЛЬНОСТЬЮ И СУФФИКСОМ - PullRequest
0 голосов
/ 30 апреля 2020

У меня ниже требования в Oracle sql разработчику, где у меня есть один столбец, который представляет собой PDF_SEQ_NUMBER и PDF_SUF_NUMBER, теперь для каждого pdf_id должен быть уникальный порядковый номер, также когда значение последовательности достигает 99, PDF_SUF_NUMBER должен сброситься до 02 и PDF_SEQ_NUMBER до 01. Мне нужно обновить таблицу с этими двумя столбцами PDF_SEQ_NUMBER и PDF_SUF_NUMBER. Пожалуйста, помогите мне в этом:

выходные данные поступают на данный момент:

pdf_id      PDF_SUF_NUMBER   PDF_SEQ_NUMBER
1029117706  01                01
1029117706  01                01
1029117706  01                01
1030444073  01                02
1030444073  01                02

Ожидаемый вывод, как показано ниже, и здесь, когда PDF_SEQ_NUMBER изменяется на 99, тогда PDF_SUF_NUMBER должен быть 02, а PDF_SEQ_NUMBER должен быть 01 :

pdf_id      PDF_SUF_NUMBER   PDF_SEQ_NUMBER
1029117706  01                01
1029117706  01                02
1029117706  01                03
1030444073  01                01
1030444073  01                02

1 Ответ

0 голосов
/ 30 апреля 2020

Это должно в основном хотеть, чтобы вы хотели:

select t.*,
       to_char(floor(row_number() over (partition by pdf 
                                        order by pdf_suf_number, pdf_seq_number
                                       ) / 100
                    ), '00'
              ) as new_pdf_suf_number,
       to_char(mod(row_number() over (partition by pdf
                                      order by pdf_suf_number, pdf_seq_number
                                     ) - 1, 100
                  ), '00'
              ) as new_pdf_seq_number
from t;

Единственное отличие состоит в том, что он начинается с 00, а не 01. Это имеет больше смысла для меня, потому что это позволяет вам увеличивать после 100 вместо 99.

Вы можете обнаружить, что самый простой подход - просто сохранить вышеупомянутые (или, вернее, нужные вам столбцы) в новую таблицу, используя create table as. UPDATE с медленнее, чем воссоздание всей таблицы.

Вы можете обновить значения, используя:

update t
    set (pdf_suf_number, pdf_seq_number) =
          (select to_char(floor(row_number() over (partition by pdf order by pdf_suf_number, pdf_seq_number) / 100), '00') as new_pdf_suf_number,
                  to_char(mod(row_number() over (partition by pdf order by pdf_suf_number, pdf_seq_number) - 1, 100), '00') as new_pdf_seq_number
            from t t2
            where t2.rowid = t.rowid
           );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...