针对 Oracle db 的控制中断类型 SQL

J W*_*uck 5 sql oracle

我正在使用一个设计奇怪(我们称之为次优)的 Oracle 数据库。一个问题是其中一列包含两种不同类型的文本数据:“标题”数据和“内容”数据。有点像这样:

ID 文本
1 标题 1:
2 美国广播公司
3 定义
4 标题 2:
5
6 jkl
7 莫诺
8 标题 3:
9 pqr

如果可能,我需要构造 SQL,它本质上返回“标题”行作为“内容”行的控制中断以获得这些结果:

Header 1: abc
Header 1: def
Header 2: ghi
Header 2: jkl
Header 2: mno
Header 3: pqr
Run Code Online (Sandbox Code Playgroud)

id 值是连续的,但每个标题的内容可以跨越任意数量的行。因此,“标题”适用于每个“内容”行的唯一线索是它是之前看到的标题(最大 id 值,其中文本如 '%Header% < id of current row)。

Gor*_*off 3

这是 Aleksej 答案的一个变体,有效:

select header || ' ' || text
from (select t.*,
             lag(case when text like 'Header%' then text end ignore nulls) over (order by id) as header 
      from t
     ) t
where text not like 'Header%';
Run Code Online (Sandbox Code Playgroud)