You need to enable JavaScript to run this app. 如何在Oracle混杂表头内容数据场景下实现control break类型SQL
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle混杂表头内容数据场景下实现control break类型SQL

Oracle 连续序列下Header与Content行关联实现

实现逻辑

通过窗口函数的累计分区特性,按照id顺序将每个Header与其后续直到下一个Header前的所有Content行划归为同一逻辑组,最终将组内的Header文本与Content文本拼接输出,完全匹配“Content行关联之前最近的Header行”的规则。

实现步骤

  • 识别表中所有满足 text LIKE '%Header%' 的Header行
  • 按id顺序累计统计Header出现的次数,将该累计值作为分组ID:Header行出现时累计值+1,Content行沿用之前的累计值,实现Header与后续Content自动同组
  • 以分组ID为分区,提取每个组内唯一的Header文本,作为同组所有Content行的关联Header值
  • 过滤掉原始的Header行,将Header文本与Content文本按格式拼接为最终输出

参考SQL

SELECT 
  header_text || ' ' || content_text AS output_content
FROM (
  SELECT 
    text AS content_text,
    MAX(CASE WHEN text LIKE '%Header%' THEN text END) OVER (PARTITION BY group_id) AS header_text,
    CASE WHEN text LIKE '%Header%' THEN 1 ELSE 0 END AS row_type
  FROM (
    SELECT 
      id,
      text,
      SUM(CASE WHEN text LIKE '%Header%' THEN 1 ELSE 0 END) 
          OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS group_id
    FROM 存储原始文本的表名
  ) base_data
) processed_data
WHERE row_type = 0
ORDER BY id;

边界说明

如果存在数据开头无前置Header的Content行,这类行的分组ID为0,对应的关联Header值为NULL,可根据业务需求决定是过滤这类行还是补充默认前缀。


内容的提问来源于stack exchange,提问作者Woodchuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 23:36:05