Как сделать строку по l oop в Oracle SQL - PullRequest
3 голосов
/ 25 февраля 2020

Я здесь новичок ie с вопросом о вашей помощи. Огромное спасибо заранее!

У меня есть такая таблица.

enter image description here

На самом деле это строка от A до B до C до D. И по «дате начала» A выбирается как «оригинальная», поскольку она появляется первой. В соответствии с этим требованием таблица должна быть зафиксирована следующим образом:

enter image description here

В таблице есть и другие подобные строки, и я должен правильно их идентифицировать и привести в строку все. Кто-нибудь здесь может помочь мне сделать это на SQL Oracle? Я не могу решить это на все oop. Большое спасибо за вашу заботу!

1 Ответ

6 голосов
/ 25 февраля 2020

Вы можете использовать запрос HIERARCHY для обновления таблицы нужным значением.

Oracle настройка данных:

SQL> select * from your_table;

START_DAT START_  END_
--------- ------- ----
01-JAN-20 A       B
02-JAN-20 B       C
03-JAN-20 C       D
01-JAN-20 X       Y
02-JAN-20 Y       Z

SQL>

Запрос на обновление данных:

SQL> UPDATE YOUR_TABLE YT
  2  SET YT.START_ = COALESCE(
  3      ( SELECT MIN(START_) KEEP(DENSE_RANK FIRST ORDER BY START_DATE)
  4          FROM YOUR_TABLE T
  5          CONNECT BY PRIOR START_ = END_
  6          START WITH END_ = YT.END_
  7      ), YT.START_);

5 rows updated.

SQL>

Обновленные данные:

SQL> select * from your_table;

START_DAT START_  END_
--------- ------- ----
01-JAN-20 A       B
02-JAN-20 A       C
03-JAN-20 A       D
01-JAN-20 X       Y
02-JAN-20 X       Z

SQL>

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...