使用临时表 + 循环展 BOM

数据仓库实践:使用SQL汇总BOM数据分析维度 正常BOM不会只有一层,因为材料的上阶料不一定直接是最终成品,有可能是半成品,会形成【材料-半成品-成品】的关系,除了用于循环的部分关键词,汇总的语句代码是最基础的SQL代码,可以使用其他的数据库方言翻译,比如Oracle。但对于常用SQL的数据分析场景下,SQL不擅长递归,所以一般需要将递归汇总的结果直接落地成表。所以为了完整展出每层关系,我们需要使用递归的方式,将基础结构多次汇总,在使用BOM汇总时,一般需要BOM明细中的所有关系,从全局看成品,半成品和最底层材料,是多对多关系。 阅读详情

  使用临时表 + 循环展 BOM 

背景

有如下的 BOM 表,parent_part 与 child_part 是多对多的关系,现在要求查询出每个 child_part 的最顶层的 parent_part

CREATE TABLE pl_bom(

    parent_part varchar(10),

    child_part varchar(10))

INSERT INTO pl_bom

SELECT 'A','C' UNION ALL

SELECT 'B','C' UNION ALL

SELECT 'C','D' UNION ALL

SELECT 'D','E' UNION ALL

SELECT 'D','F' UNION ALL

SELECT 'H','F'

       即根据上述数据,应该得到如下结果

child_part parent_part

---------- -----------

C          A

C          B

D          A

D          B

E          A

E          B

F          A

F          B

F          H

 

处理方法

       一般可能会考虑从 child_part 开始扫描的方法。但对于每个 child_part 而言,它有一至多个 parent_part,对于多个parent_part 而言,每个 parent_part 到最顶部的 parent_part 经过的层数还可能不一致,这会导致扫描算法不太好写,而且同一个 parent_part 如果被多个 child_part 引用的话, 还可能导致重复的搜索此 parent_part 的顶 parent_part。

下面的算法采用自 parent_part 反推 child_part 的方式,可以避免重复扫描某个 parent_part 到 child_part 的问题

-- 使用自顶向下展开

-- 因为要删除数据, 所以不能用原始表, 用个临时表

SELECT

    id = IDENTITY(int, 1,1 ), child_part, parent_part

INTO #

FROM pl_bom

 

-- 从顶往下展

DECLARE @Level int

SET @Level = 1

SELECT

    id = id * 1, Level = @Level,

    child_part, parent_part

INTO #re

FROM # A

WHERE NOT EXISTS(

        SELECT * FROM #

        WHERE child_part = A.parent_part)

WHILE @@ROWCOUNT > 0

BEGIN

    SET @Level = @Level + 1

    DELETE A

    FROM # A, #re B

    WHERE A.id = B.id

        AND B.Level = @Level - 1

 

    INSERT #re(

        id, Level,

        child_part, parent_part)

    SELECT

        A.id, @Level,

        A.child_part, B.parent_part

    FROM # A, #re B

    WHERE A.parent_part = B.child_part

        AND B.Level = @Level - 1

END

 

-- 显示结果

SELECT

    child_part, parent_part

FROM #re

ORDER BY 1, 2

 

-- 删除临时表

DROP TABLE #re, #

 

转自:http://blog.youkuaiyun.com/zjcxc/archive/2007/08/29/1763598.aspx

SQL展多阶BOM语句,仿易飞展多阶用量清单 仿易飞ERP展多阶BOM用量清单报表,根据BOM的层次进行排序显示。 立即下载

相关推荐

PcbBom分析汇总软件

此程序源码用于对Protel 99SE软件生成的电子料bom表进行整理归类

sqlserver中一条sql查询语句无限级的展开多级子 bom算法示例

/* 思路说明: 1 展开多层次bom就需要用循环的方法展开,sqlserver中2005版本后就有了递归的查询with 2 要让sql查询出来的结果有像树装结构一样的效果,就需要有层级level,如果没有lever就要计算出一个level来,需要用加空格的方式来实现层级样式 3 需要父子关系的要在一起就一定得要按层级的顺序来排序ordby,所以我先对顶层的加一个顺序号,先按顶层的排序; 然后再加上各父子bom的关系建立路径bom_path(一定要父子子父的串在一起.

军哥博客欢迎您 3665

易飞ERP中展BOMSQL语句(一次性展多阶)

易飞ERP中(不限版本), 展BOM(多阶 不含替代料)易懂的SQL存储过程

SQL对BOM多级展开实现

代码直接粘贴jiukeyishi SET NOCOUNT ON;   USE tempdb;   GO   IF OBJECT_ID('dbo.Employees') IS NOT NULL     DROP TABLE dbo.Employees;   GO   CREATE TABLE dbo.Employees   (     empid   INT        

baidu_21856213的专栏 2584

BOM计算原理

这里提供一个简易BOM计算,给从事PMC的人参考

相控阵雷达“相控”原理---多张动画示意图完美解释

很容易就能发现,相控阵雷达的天线由无数个小单元天线组成,这些小单元天线叫做“阵元”,对于有源相控阵雷达来说,每一个阵元都是独立控制的,它们既能独立发射雷达波,也能接收雷达波的回波信号。相控阵雷达可以在1秒内关机,1秒内开机,好处是,当军舰遇到依靠雷达信号进行引导的“反雷达导弹”时,可以迅速地把朝向来袭导弹方向的雷达关机,同时,其他方向的雷达保持开启。在过去,军舰上安装有不同种类的雷达,体积庞大、重不说,另一个麻烦是干扰,常常是,一种雷达工作时,另一种雷达就会受到干扰,严重的甚至不能同时工作。

muyangjun的专栏 1万+

多层bom展开_K3 BOM 多级展开SQL

CREATE TABLE t_IC_Item(FItemID int,FNumber varchar(200),FName varchar(200),FModel varchar(200),FUnitID int,FErpClsID int)INSERT t_IC_ItemSELECT 1,'CP.001','产品1' ,'产品规格1' ,1,2 UNIONSELECT 2,'BC.0...

weixin_39997037的博客 756

实战解析:如何利用MDFEND与Weibo21数据集构建多领域假新闻检测系统

本文实战解析了如何利用MDFEND模型与Weibo21数据集构建多领域假新闻检测系统。文章深入剖析了MDFEND的领域门控与专家混合机制,并提供了从数据预处理、模型理解到训练部署的完整指南,旨在解决通用模型在不同领域新闻检测中的性能衰减问题,提升检测的准确性与适应性。

vulkan6gpu的博客 581

使用临时表 + 循环展 BOM 收藏

  使用临时表 + 循环展 BOM 收藏 背景有如下的 BOM 表,parent_part 与 child_part 是多对多的关系,现在要求查询出每个 child_part 的最顶层的 parent_partCREATE TABLE pl_bom(    parent_part varchar(10),    child_part varchar(10))INSERT INT

zhengyingcan的专栏 652

Kafka 系列 —(17)Kafka 流式处理:Kafka Streams架构、使用场景、框架选择

本文介绍了KafkaStreams的架构特点、应用场景及与其他流处理框架的比较。KafkaStreams作为嵌入式分布式流处理库,其核心架构包含流处理器、任务、拓扑和本地状态存储,具备自动容错和伸缩能力。适用于实时监控、ETL、聚合、Join、物化视图等低延迟场景。与Flink、Spark相比,KafkaStreams适合简单架构和微服务,而Flink适合大规模处理,Spark更适合批处理。选择框架需根据具体场景需求,如微服务推荐KafkaStreams,大规模处理推荐Flink。

moton2017的博客 1631

生物信息学实战:如何用STRING数据库和R语言搞定蛋白互作网络分析(附完整代码)

本文提供了一份完整的生物信息学实战指南,详细介绍了如何利用STRING数据库和R语言进行蛋白互作网络分析。从差异表达基因列表出发,涵盖数据准备、数据库连接、网络构建到高级可视化与模块识别的全流程,并附有可复现的完整R代码,帮助研究人员深入解析转录组数据背后的蛋白互作关系。

milk5的博客 948
上一篇: BOM表-SQL-示例
下一篇: Windows 2008 server R2 + IIS 7.5 搭建FTP 使用Windows验证
newtea
博客等级 码龄19年 4粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值