当前位置: 首页 > news >正文

Oracle CTE递归实现PCB行业的叠层关系

1、需求背景,出货报告要实现叠板假层的处理,需求如下

表ID,layer,MEDIUM数据如下
第一种情况,layer有K的

IDlayerMEDIUM
1L1-L230
2L2-L340
3L3-K120
4K1-L410
5L4-L520
6L5-L630
7L7-K210
8K2-L811
9L8-L910
10L9-L1030

实现layer有K1的,L3-L4,并合计 MEDIUM列等于30,layer有K2的,L7-L8,并合计 MEDIUM列等于21

layerMEDIUM
L1-L230
L2-L340
L3-L430
L4-L520
L5-L630
L7-L821
L8-L910
L9-L1030

第二种情况,layer有K的

IDlayerMEDIUM
1L1-L230
2L2-L340
3L3-K120
4K1-K210
5K2-L420
6L4-L530
7L5-L610

实现layer有K的,L3-L4,并合计 MEDIUM列等于50=(20+10+20)

layerMEDIUM
L1-L230
L2-L340
L3-L450
L4-L530
L5-L610

处理思路

该方案通过递归CTE构建完整路径链,自动处理单K节点(如L3-K1-L4)和多K连续节点(如L3-K1-K2-L4)两种情况,输出合并后的层级路径及MEDIUM总和。

执行示例:

第一种情况输出:

L3-L4 | 30
L7-L8 | 21

第二种情况输出:

L3-L4 | 50 (20+10+20)

关键特性:

动态节点识别:自动检测所有K节点(K1/K2等)15
路径完整性检查:确保合并后的路径始终以非K节点结尾68
最短路径优先:当存在多条合并路径时选择最短链路

WITH 表达式


WITH split_data AS (SELECT ID,layer,MEDIUM,REGEXP_SUBSTR(layer, '[^-]+') AS start_node,REGEXP_SUBSTR(layer, '[^-]+$') AS end_nodeFROM layer_data
),
path_chains AS (-- 基础路径(起始节点非K的路径)SELECT ID, layer, MEDIUM,start_node AS chain_start,end_node AS chain_end,CAST(layer AS VARCHAR2(4000)) AS full_path,MEDIUM AS total_medium,1 AS path_levelFROM split_data WHERE start_node NOT LIKE 'K%'UNION ALL-- 递归连接后续路径SELECT d.ID, d.layer, d.MEDIUM,p.chain_start,d.end_node AS chain_end,p.full_path || '→' || d.layer,p.total_medium + d.MEDIUM,p.path_level + 1FROM path_chains pJOIN split_data d ON p.chain_end = d.start_nodeWHERE p.chain_end NOT LIKE 'L%'  -- 仅连接K节点或中间节点
),
k_merged AS (SELECT chain_start || '-' || chain_end AS combined_layer,total_medium,ROW_NUMBER() OVER (PARTITION BY chain_start, chain_end ORDER BY path_level) AS rnFROM path_chainsWHERE chain_end LIKE 'L%'  -- 最终结束节点需为非K节点AND full_path LIKE '%K%'   -- 必须包含K节点
)
SELECT combined_layer,total_medium
FROM k_merged
WHERE rn = 1  -- 取最短路径合并结果
ORDER BY combined_layer;
http://www.dtcms.com/a/266263.html

相关文章:

  • 缓存雪崩、穿透、预热、更新与降级问题与实战解决方案
  • 【网络】Linux 内核优化实战 - net.core.flow_limit_table_len
  • 批量剪辑混剪系统源码搭建与定制化开发:支持OEM
  • LeetCode1456. 定长子串中元音的最大数目
  • Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用
  • 在数学中一个实对称矩阵的特性分析
  • 每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
  • Web 项目如何自动化测试?
  • 大语言模型预训练数据——数据采样方法介绍以GPT3为例
  • 银河麒麟V10服务器版 + openGuass + JDK +Tomcat
  • 基于FPGA的一维序列三次样条插值算法verilog实现,包含testbench
  • 类图+案例+代码详解:软件设计模式----原型模式
  • 【网络与系统安全】域类实施模型DTE
  • 【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
  • 篇二 OSI七层模型,TCP/IP四层模型,路由器与交换机原理
  • 花尖墨 Web3 水果品牌白皮书
  • 【牛客算法】小苯的数字权值
  • Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
  • 基于Simulink的二关节机器人独立PD控制仿真
  • Java泛型笔记
  • 【Unity 编辑器工具开发:GUILayout 与 EditorGUILayout 对比分析】
  • 【阿里巴巴JAVA开发手册】IDE的text file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式,不要使用Windows格式。
  • React Native响应式布局实战:告别媒体查询,拥抱跨屏适配新时代
  • 【银行测试】手机银行APP专项项目+测试点汇总(一)
  • D3 面试题100道之(1-20)
  • Java SE线程的创建
  • 医养照护与管理实训室建设方案:培育医养结合领域复合型人才
  • ZKmall模块商城批发电商平台搭建方案,多商户支持 + 订单管理功能全覆盖
  • 基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
  • 如何保障MySQL客户端连接数据库安全更安全