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.pswp.cn/bicheng/87643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87643.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87643.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kubernetes 服務發布基礎學習

一、Service 概述(一)Service 的定義Service 是 Kubernetes 中的一種抽象概念,用于定義一組 Pod 以及訪問這組 Pod 的策略。其核心作用是將一組 Pod 封裝為一個虛擬服務,并為客戶端提供統一的入口,從而實現服務的負載均…

【零基礎學AI】第21講:TensorFlow基礎 - 神經網絡搭建入門

本節課你將學到理解什么是TensorFlow,為什么要用它 掌握TensorFlow安裝和基本操作 學會搭建第一個神經網絡 完成手寫數字識別項目 開始之前 環境要求 Python 3.8至少4GB內存網絡連接(用于下載數據集) 前置知識 第1-8講:Python基礎…

STM32 串口USART通訊驅動

前言 本篇文章對串口Usart進行講解,為后面的esp8266和語音模塊控制打好基礎。 1.串口USART USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步 / 異步收發器) 是一種常見的串行通信接口,廣泛應…

pytorch版本densenet代碼講解

DenseNet 模型代碼詳解 下面是 DenseNet 模型代碼的逐部分詳細解析: 1. 導入模塊 import re from collections import OrderedDict from functools import partial from typing import Any, Optionalimport torch import torch.nn as nn import torch.nn.functional…

前端常見設計模式深度解析

# 前端常見設計模式深度解析一、設計模式概述 設計模式是解決特定問題的經驗總結,前端開發中常用的設計模式可分為三大類: 創建型模式:處理對象創建機制(單例、工廠等)結構型模式:處理對象組合(…

React 學習(3)

核心API——React.creatElement()方法優點:將創建元素、添加屬性和事件、添加內容和子元素等使用原生dom需要進行復雜操作才能實現的功能集成在一個API中。1.該方法接收三個參數第一個是要創建的元素的名稱(小寫是因為如果,大寫開頭會被react…

傾斜攝影無人機飛行航線規劃流程詳解

在傾斜攝影測量項目中,航線規劃的嚴謹性直接決定了最終三維模型的質量與完整性。照片覆蓋不全、模型空洞、紋理模糊或分辨率不達標等問題,往往源于規劃階段對關鍵細節的疏忽。本文將系統梳理傾斜攝影無人機航線規劃的核心流程與關鍵要點,旨在…

Minio大文件分片上傳

一、引入依賴 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.3</version></dependency> 二、自定義Minio客戶端 package com.gstanzer.video.controller;import com.google.common.c…

Jenkins 插件深度應用:讓你的CI/CD流水線如虎添翼 [特殊字符]

Jenkins 插件深度應用&#xff1a;讓你的CI/CD流水線如虎添翼 &#x1f680; 嘿&#xff0c;各位開發小伙伴&#xff01;今天咱們來聊聊Jenkins的插件生態系統。如果說Jenkins是一臺強大的引擎&#xff0c;那插件就是讓這臺引擎發揮最大威力的各種零部件。準備好了嗎&#xff1…

密碼學(斯坦福)

密碼學筆記 \huge{密碼學筆記} 密碼學筆記 斯坦福大學密碼學的課程筆記 課程網址&#xff1a;https://www.bilibili.com/video/BV1Rf421o79E/?spm_id_from333.337.search-card.all.click&vd_source5cc05a038b81f6faca188e7cf00484f6 概述 密碼學的使用背景 安全信息保護…

代碼隨想錄算法訓練營第四十六天|動態規劃part13

647. 回文子串 題目鏈接&#xff1a;647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 文章講解&#xff1a;代碼隨想錄 思路&#xff1a; 以dp【i】表示以s【i】結尾的回文子串的個數&#xff0c;發現遞推公式推導不出來此路不通 以dp【i】【j】表示s【i】到s【j】的回…

基于四種機器學習算法的球隊數據分析預測系統的設計與實現

文章目錄 有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹項目展示隨機森林模型XGBoost模型邏輯回歸模型catboost模型每文一語 有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主 項目介紹 本項目旨在設計與實現…

http、SSL、TLS、https、證書

一、基礎概念 1.HTTP HTTP (超文本傳輸協議) 是一種用于客戶端和服務器之間傳輸超媒體文檔的應用層協議&#xff0c;是萬維網的基礎。 簡而言之&#xff1a;一種獲取和發送信息的標準協議 2.SSL 安全套接字層&#xff08;SSL&#xff09;是一種通信協議或一組規則&#xf…

在 C++ 中,判斷 `std::string` 是否為空字符串

在 C 中&#xff0c;判斷 std::string 是否為空字符串有多種方法&#xff0c;以下是最常用的幾種方式及其區別&#xff1a; 1. 使用 empty() 方法&#xff08;推薦&#xff09; #include <string>std::string s; if (s.empty()) {// s 是空字符串 }特性&#xff1a; 時間…

【Harmony】鴻蒙企業應用詳解

【HarmonyOS】鴻蒙企業應用詳解 一、前言 1、應用類型定義速覽&#xff1a; HarmonyOS目前針對應用分為三種類型&#xff1a;普通應用&#xff0c;游戲應用&#xff0c;企業應用。 而企業應用又分為&#xff0c;企業普通應用和設備管理應用MDM&#xff08;Mobile Device Man…

Linux云計算基礎篇(8)

VIM 高級特性插入模式按 i 進入插入模式。按 o 在當前行下方插入空行并進入插入模式。按 O 在當前行上方插入空行并進入插入模式。命令模式:set nu 顯示行號。:set nonu 取消顯示行號。:100 光標跳轉到第 100 行。G 光標跳轉到文件最后一行。gg 光標跳轉到文件第一行。30G 跳轉…

Linux進程單例模式運行

Linux進程單例模式運行 #include <iostream> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int write_pid(const cha…

【Web 后端】部署服務到服務器

文章目錄 前言一、如何啟動服務二、掛載和開機啟動服務1. 配置systemctl 服務2. 創建server用戶3. 啟動服務 總結 前言 如果你的后端服務寫好了如果部署到你的服務器呢&#xff0c;本次通過fastapi寫的服務實例&#xff0c;示范如何部署到服務器&#xff0c;并做服務管理。 一…

國產MCU學習Day5——CW32F030C8T6:窗口看門狗功能全解析

每日更新教程&#xff0c;評論區答疑解惑&#xff0c;小白也能變大神&#xff01;" 目錄 一.窗口看門狗&#xff08;WWDG&#xff09;簡介 二.窗口看門狗寄存器列表 三.窗口看門狗復位案例 一.窗口看門狗&#xff08;WWDG&#xff09;簡介 CW32F030C8T6 內部集成窗口看…

2025年文件加密軟件分享:守護數字世界的核心防線

在數字化時代&#xff0c;數據已成為個人與企業的寶貴資產&#xff0c;文件加密軟件通過復雜的算法&#xff0c;確保信息在存儲、傳輸與共享過程中的保密性、完整性與可用性。一、文件加密軟件的核心原理文件加密軟件算法以其高效性與安全性廣泛應用&#xff0c;通過對文件數據…