如何在 Oracle SQL 中通过循环生成字符串

vdn*_*dnm 3 sql string oracle loops

我是新手,有一个问题寻求您的帮助。非常感谢!

我有一张这样的桌子。

在此处输入图片说明

它实际上是一个从 A 到 B 到 C 到 D 的字符串。在“开始日期”之前,A 被选为“原始字符串”,因为它是第一个出现的。根据该要求,桌子应该像这样固定

在此处输入图片说明

表中还有其他类似的字符串,我必须正确识别和串接它们。这里的任何人都可以帮助我在SQL Oracle上做这件事吗?我无法循环解决。非常感谢您的关心!

Tej*_*ash 6

您可以使用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>
Run Code Online (Sandbox Code Playgroud)

查询更新数据:

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>
Run Code Online (Sandbox Code Playgroud)

更新数据:

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>
Run Code Online (Sandbox Code Playgroud)

干杯!!