我正在使用一个设计奇怪(我们称之为次优)的 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)。
这是 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)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |