直接用SQL写出带扩展数量的BOM多级清单

合集下载

sql数据库u8物料清单展开语句

sql数据库u8物料清单展开语句

sql数据库u8物料清单展开语句在U8中,物料清单展开是指将某款成品的所有组成部分展开,包括子组件和原材料等,以便于查看和管理成品的各项属性。

以下是SQL数据库U8物料清单展开语句的中文详细介绍。

一、物料清单展开语句介绍```SQL--展开所有物料清单明细SELECT ode,t1.cInvCode,t1.cInvName,t1.cInvStd,t1.cInvAddCode,t1.cUnitID,t2.iQuantity,omUnitNameFROM BOM t1LEFT JOIN BOMChild t2 ON t1.cBOMID = t2.cParentCodeLEFT JOIN ComputationUnit t3 ON omUnitCode = omUnitCodeWHERE t1.cInvCode = '成品物料编码'```其中,BOM为物料清单主表,BOMChild为物料清单明细表,ComputationUnit为计量单位表。

1. ccode:物料清单编码,即成品物料编码;2. cInvCode:物料编码,即子组件和原材料的编码;3. cInvName:物料名称,即子组件和原材料的名称;4. cInvStd:规格型号,即子组件和原材料的规格型号;5. cInvAddCode:物料自定义属性;6. cUnitID:计量单位编码;7. iQuantity:数量,即子组件和原材料的用量;8. cComUnitName:计量单位名称。

物料清单展开语句可以在生产或仓库管理系统中应用,以便于查看和管理成品的各项属性。

例如,当需要查询某款成品的生产原材料用量时,可以使用物料清单展开语句展开该成品的所有组成部分,从而方便查看和管理原材料的用量及其他属性。

在使用物料清单展开语句时,应注意对SQL语句进行优化,以提高查询效率。

具体优化方法如下:1. 在BOM表和BOMChild表中建立物料编码、物料清单编码及序号的索引;2. 使用LEFT JOIN关联BOM表和BOMChild表时,应将LEFT JOIN改为INNER JOIN,避免产生多余的数据;3. 对于较大的数据库表,可通过分页查询等方法来优化查询效率。

sql server bom递归计算用量

sql server bom递归计算用量

SQL Server BOM(Bill of Materials,物料清单)递归计算用量是制造业中常用的一项技术。

通过递归计算,可以按照产品的组成结构和用量,计算出每个零件的实际用量,为生产计划、库存管理、成本核算等提供支持。

本文将从基本原理、SQL Server实现方法和应用示例等方面进行详细介绍。

一、基本原理BOM递归计算用量的基本原理是将产品的组成结构抽象成一棵树,树的节点代表产品或零件,边表示产品之间的组装关系。

通过深度优先遍历树的算法,可以逐级计算出每个零件的用量。

递归计算的过程可以用一些常见的算法模型来描述,比如递归函数、递归查询等。

二、SQL Server实现方法在SQL Server中,可以通过递归查询来实现BOM的递归计算用量。

SQL Server提供了CTE(Common Table Expression,公共表表达式)和递归查询语法,可以方便地编写递归查询语句。

具体实现步骤如下:1. 定义递归查询的公共表表达式,包括产品ID、零件ID、使用数量等字段。

2. 编写递归查询语句,使用UNION ALL将递归查询的结果集逐级连接起来,直到计算出最终的用量。

3. 对递归查询的结果集进行聚合和计算,得到每个零件的实际用量。

三、应用示例假设某公司生产一款产品A,产品A由零件B和零件C组成,其中零件B又由零件D和零件E组成。

现需要计算出生产1000台产品A所需的各个零件的实际用量。

可以按照以下步骤进行计算:1. 构建产品A的BOM结构,包括产品ID、零件ID和使用数量等字段。

2. 编写递归查询语句,按照产品的组成结构逐级计算出每个零件的用量。

3. 对递归查询的结果集进行聚合和计算,得到零件B、零件C、零件D和零件E的实际用量。

4. 根据实际用量和生产数量,计算出各个零件的生产需求。

四、总结BOM递归计算用量是制造业中常用的技术,可以帮助企业优化生产计划、库存管理和成本核算。

在SQL Server中,可以通过递归查询和CTE等技术实现BOM递归计算用量的功能。

一种基于sql的快速bom展开方法与流程

一种基于sql的快速bom展开方法与流程

一、概述BOM(Bill of Materials)是指物料清单,它记录了产品所需的所有零部件、原材料和组件。

在制造业中,BOM的准确性和完整性对产品的生产过程至关重要。

快速、准确地展开BOM对于提高生产效率和质量至关重要。

基于SQL的快速BOM展开方法与流程能够帮助制造企业实现BOM的高效展开和管理,本文将介绍这种方法的具体步骤和流程。

二、基于SQL的快速BOM展开方法1. 数据库设计在实施基于SQL的快速BOM展开方法之前,需要进行数据库的设计。

数据库中需要包含产品、零部件、原材料、组件等相关信息,并建立它们之间的关联关系。

合理的数据库设计是快速BOM展开的基础和关键。

2. SQL查询语句编写在数据库设计完成后,需要编写SQL查询语句来实现快速BOM展开。

SQL查询语句需要能够根据产品的BOM结构,快速地查询出所有的零部件、原材料和组件信息,并按照特定的展开规则进行展开。

3. BOM展开规则BOM展开的规则是确定BOM展开顺序和层级的重要依据。

BOM展开规则应该包括递归展开和非递归展开两种方式,同时能够满足不同产品的展开需求。

4. 数据处理SQL查询语句执行后,需要对查询结果进行合理的数据处理,将展开后的BOM信息以清晰的结构进行展示和管理。

数据处理包括数据清洗、去重、归类等步骤。

三、基于SQL的快速BOM展开流程1. 数据准备在执行BOM展开之前,需要准备好相应的数据,包括产品的BOM信息、数据库的设计和建立以及展开规则的确定等。

2. SQL查询根据展开规则编写SQL查询语句,执行查询语句获取BOM信息。

在SQL查询过程中需要考虑性能优化和查询速度,以确保快速展开。

3. 数据处理与展示对查询结果进行合理的数据处理和展示,将展开后的BOM信息呈现给用户。

数据展示需要清晰明了、易于理解。

4. 数据管理对展开后的BOM信息进行管理,包括更新、修改、删除等操作,以确保BOM信息的准确性和完整性。

四、基于SQL的快速BOM展开方法的优势1. 高效快速:基于SQL的快速BOM展开方法能够在短时间内处理大量BOM信息,提高了BOM展开的效率和速度。

多层BOM表

多层BOM表

是否禁用 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否
备注பைடு நூலகம்
Page 3
子项物料 代码 01.001 02.001 01.002 01.003 01.004 02.002 01.003 01.004 01.005 02.003 01.003 01.004 01.006 02.004 01.007 01.010 01.011 02.005 01.008 01.012 02.006 01.009
0
普通件
0
普通件
0
普通件
0
普通件
0
普通件
0
普通件
0
普通件
0
普通件
0
普通件
0
普通件
0
普通件
工序号 1
2 3 4
工序 注塑
注塑 注塑 注塑
工位
发料仓库 原料仓 半成品仓 原料仓 原料仓 原料仓 半成品仓 原料仓 原料仓 原料仓 半成品仓 原料仓 原料仓 原料仓 半成品仓 原料仓 原料仓 原料仓 半成品仓 原料仓 原料仓 半成品仓 原料仓
000001350计划百分比损耗率子项类型1000100010001000100010001000100010001000100010001000100010001000100010001000100010001000工序号工序工位发料仓库原料仓半成品仓原料仓原料仓原料仓半成品仓原料仓原料仓原料仓半成品仓原料仓原料仓原料仓半成品仓原料仓原料仓原料仓半成品仓原料仓原料仓半成品仓原料仓普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件普通件1注塑2注塑3注塑4注塑page2bom多级展开最后更新日期20121101备注字段18字段19关键件标志否否否否否否否否否否否否否否否否否否否否否否使用状态使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用使用是否禁用否否否否否否否否否否否否否否否否否否否否否否备注page3

一种基于sql的快速bom展开方法与流程 -回复

一种基于sql的快速bom展开方法与流程 -回复

一种基于sql的快速bom展开方法与流程-回复一种基于SQL的快速BOM展开方法与流程引言:在制造业中,BOM(Bill of Materials)是一份清单,记录着产品所需的各种零部件和原材料。

BOM分类繁多且层级复杂,因此在制造过程中对BOM进行快速展开并进行分析是一项关键任务。

本文将介绍一种基于SQL的快速BOM展开方法与流程。

第一步:数据库设计在开始BOM展开之前,我们首先需要设计一个能够存储BOM数据的数据库。

一个基本的BOM数据库应该包含产品、部件和关系三个表。

1. 产品表(Product Table):记录所有产品的基本信息,如产品编号、名称和描述等。

2. 部件表(Component Table):记录所有部件的基本信息,如部件编号、名称和描述等。

3. 关系表(Relation Table):记录产品与部件之间的关系,即产品由哪些部件构成。

关系表应该至少包含产品编号和部件编号两个字段。

在数据库设计中,合理的表结构和索引设计将对BOM展开的速度和性能产生重要影响。

第二步:编写SQL查询借助于SQL的强大功能,我们可以通过编写SQL查询语句来快速展开BOM。

BOM展开的核心思想是递归查询。

我们可以使用递归查询语句来从顶层产品开始逐层展开,直至展开到最底层的部件。

以下是一个示例的SQL查询语句,展示了如何递归查询BOM以获得完整的展开结果:WITH RECURSIVE bom_tree AS (选取顶层产品SELECT product_id, component_id, 1 AS levelFROM relationWHERE product_id = '顶层产品编号'UNION ALL递归查询下一层的部件SELECT bom_tree.product_id, relationponent_id, bom_tree.level+ 1FROM bom_treeJOIN relation ON bom_treeponent_id = relation.product_id)查询结果SELECT bom_tree.product_id, componentponent_name,bom_tree.levelFROM bom_treeJOIN component ON componentponent_id = bom_treeponent_id ORDER BY bom_tree.level;这个SQL查询语句中使用了WITH RECURSIVE子句实现递归查询。

如何用一个SQL来查BOM--递回查询(精)

如何用一个SQL来查BOM--递回查询(精)

如何用一個 SQL 來查 BOM -- 遞迴查詢常常在設計連結資料庫程式的時候, 階層式架構的 Table 大致上都是母子在同一行的樣式來設計,資料庫 Table 是容易設計,不過呢? 要把所有的階層展開時,程式就不容易寫,且執行效能也低落, 其實 SQL 是可以做遞迴查詢的,不但不用寫程式一直 WHILE 跑迴圈 , 而且執行效率更快. 以下是 TIPTOP 5.x 的多階 BOM 的 Oracle 範例: selectlevel,bmb02,bmb01,bmb03,bmb04,bmb05 from bmb_file,bma_file,ima_file where (bmb05 > sysdate or bmb05 is null and (bmb04 < sysdate or bmb04 is null and bma01 = bmb01 and bmaacti = 'Y' and bma01 = ima01 connect by bmb01 = prior bmb03 and (bmb05 > sysdate or bmb05 is null and (bmb04 < sysdate or bmb04 is null and bmaacti = 'Y' start with ima01 = '料件編號' and (bmb05 > sysdate or bmb05 is null and (bmb04 < sysdate or bmb04 is null and bmaacti = 'Y' 抓取最新的 BOM , 有生失效日的判斷 , 重點是還有階層數喔~~ 可以試試看. 再提供一些相關的指令:SYS_CONNECT_BY_PATH(欄位,符號:可以列出整個路徑出來,符號用 -> 會比較清楚 CONNECT_BY_ISLEAF:可以判斷是不是最底層CONNECT_BY_ROOT(欄位:顯示最上層的資料欄位。

K3 BOM 多级展开SQL及实例分析,BOM数据接口

K3 BOM 多级展开SQL及实例分析,BOM数据接口

K3 BOM 多级展开SQLCREATE TABLE t_IC_Item(FItemID int,FNumber varchar(200),FNamevarchar(200),FModel varchar(200),FUnitID int,FErpClsID int)INSERT t_IC_ItemSELECT1,'CP.001','产品1' ,'产品规格1' ,1,2UNIONSELECT2,'BC.001','半成品1' ,'半成品规格1' ,1,2UNIONSELECT3,'BC.002','半成品2' ,'半成品规格2' ,1,2UNIONSELECT4,'BC.003','半成品3' ,'半成品规格3' ,1,3UNIONSELECT5,'BC.004','半成品4' ,'半成品规格4' ,1,2UNIONSELECT6,'ZC.001','主材料1' ,'主材料规格1' ,1,1UNIONSELECT7,'ZC.002','主材料2' ,'主材料规格2' ,1,1UNIONSELECT8,'ZC.003','主材料3' ,'主材料规格3' ,1,1UNIONSELECT9,'ZC.004','主材料4' ,'主材料规格4' ,1,1UNIONSELECT10,'ZC.005','主材料5' ,'主材料规格5' ,1,1UNIONSELECT11,'ZC.006','主材料6' ,'主材料规格6' ,1,1UNIONSELECT12,'ZC.007','主材料7' ,'主材料规格7' ,1,1UNIONSELECT13,'ZC.008','主材料8' ,'主材料规格8' ,1,1UNIONSELECT14,'ZC.009','主材料9' ,'主材料规格9' ,1,1UNIONSELECT15,'ZC.010','主材料10','主材料规格10',1,1UNIONSELECT16,'ZC.011','主材料11','主材料规格11',1,1UNIONSELECT17,'ZC.012','主材料12','主材料规格12',1,1CREATE TABLE t_Unit(FID int,FName varchar(20))INSERT t_Unit SELECT1,'个'CREATE TABLE t_BOM(FID int,FBomNo varchar(200),FItemID int,FQty decimal(28,10),FUnitID int)INSERT t_BOMSELECT1,'BOM01',1,1,1UNIONSELECT2,'BOM02',2,1,1UNIONSELECT3,'BOM03',3,1,1UNIONSELECT4,'BOM04',4,1,1UNIONSELECT5,'BOM05',5,1,1CREATE TABLE t_BOMChild(FID int,FEntryID int,FItemID int,FQtydecimal(28,10),FUnitID int)INSERT t_BOMChildSELECT1,1, 2,1,1UNIONSELECT1,2, 3,1,1UNIONSELECT1,3,15,1,1UNIONSELECT1,4,17,1,1UNIONSELECT2,1, 6,1,1UNIONSELECT2,2, 7,1,1UNIONSELECT3,1, 8,1,1UNIONSELECT3,2, 9,1,1UNIONSELECT3,3, 7,1,1UNIONSELECT3,4, 4,1,1UNIONSELECT4,1,10,1,1UNIONSELECT4,2,11,1,1UNIONSELECT4,3, 5,1,1/*UNIONSELECT 5,1,12,1,1 UNIONSELECT 5,2,13,1,1 UNIONSELECT 5,3,14,1,1 UNIONSELECT 5,4,16,1,1 UNIONSELECT 5,5, 7,1,1*/GOcreate procedure sp_testasbegindeclare@i intdeclare@t table(Level int,Code varchar(40),FItemIDint,FNumber varchar(20),FName varchar(20),FModel varchar(20),FErpClsID int,FQty int,FName1 varchar(20),Status varchar(20))declare@t1table(id int identity(1,1),Level varchar(10),Code varchar(40),FItemID int,FNumber varchar(20),FName varchar(20), FModel varchar(20),FErpClsIDvarchar(20),FQty int,FName1 varchar(20),Status varchar(20))set@i=0insert into@tselectdistinct@i,right('000'+rtrim(a.FItemID),4),a.FItemID,a.FNumber,a.FName ,a.FModel,a.FErpClsID,b.FQty,c.FName,'正常'fromt_IC_Item a,t_BOM b,t_Unit cwherea.FUnitID=b.FUnitID and b.FUnitID=c.FIDandnot exists(select1from t_BOM d,t_BOMChild e whered.FID=e.FID and e.FItemID=a.FItemID)andexists(select1from t_BOM m,t_BOMChild n wherem.FID=n.FID and M.FID=a.FItemID)while@@rowcount>0beginset@i=@i+1insert into@tselect@i,e.Code+right('000'+rtrim(d.FEntryID),4),a.FItemID,a.FNumber,a.FName,a.FModel,a.FErpClsID,b.FQty*d.FQty *e.FQty,c.FName,case when a.FItemID in(select m.FID from t_BOM m,t_BOMChild n where m.FID=n.FID) then'正常'when a.FItemID in(select FID from t_BOM) then 'BOM未建'else''endfromt_IC_Item a,t_BOM b,t_Unit c,t_BOMChild d,@t e wherea.FUnitID=b.FUnitIDand b.FUnitID=c.FIDand a.FItemID=d.FItemIDand b.FID=d.FIDand d.FID=e.FItemIDand e.level=@i-1endinsert into@t1(Level,Code ,FItemID ,FNumber,FName,FModel,FErpClsID,FQty,F Name1,Status)selectt.*from(select top100percentREPLICATE('.',Level)+rtrim(Level) as level,Code,FItemID,FNumber,FName,FModel,(case FErpClsID when1then'外购'when2then '自制'when3then'委外加工'else''end) as FErpClsID,FQty,FName1,Statusfrom@torder bycode) tselectId,Level ,FItemID,FName,FModel,FErpClsID,FQty,FName1,Statusfrom@t1order by codeendgoexec sp_test/*Id Level FItemID FName FModel FErpClsID FQty FName1 Status ----------- ---------- ----------- ---------------------------------------- -------------------- ------------------------------- --------------------1 0 1 产品1 产品规格1 自制 1 个正常2 .1 2 半成品1 半成品规格1 自制 1 个正常3 ..2 6 主材料1 主材料规格1 外购 1 个4 ..2 7 主材料2 主材料规格2 外购 1 个5 .1 3 半成品2 半成品规格2 自制 1 个正常6 ..2 8 主材料3 主材料规格3 外购 1 个7 ..2 9 主材料4 主材料规格4 外购 1 个8 ..2 7 主材料2 主材料规格2 外购 1 个9 ..2 4 半成品3 半成品规格3 委外加工 1 个正常10 ...3 10 主材料5 主材料规格5 外购 1 个11 ...3 11 主材料6 主材料规格6 外购 1 个12 ...3 5 半成品4 半成品规格4 自制 1 个BOM未建13 .1 15 主材料10 主材料规格10 外购 1 个14 .1 17 主材料12 主材料规格12 外购 1 个*/goDROP procedure sp_testDROP TABLE t_IC_ItemDROP TABLE t_UnitDROP TABLE t_BOMDROP TABLE t_BOMChildGO。

mysql查询bom清单_按BOM清单展开物料及需求(SQL)

mysql查询bom清单_按BOM清单展开物料及需求(SQL)

mysql查询bom清单_按BOM清单展开物料及需求(SQL)适⽤环境:⼈⼯的去展开BOMCREATE function f_pcode1(@code varchar(20))returns @re1 table(code varchar(20),father varchar(20),uom varchar(5),quantity float,level1 int)asbegindeclare @l intdeclare @father varchar(20)declare @uom varchar(5)declare @quantity floatset @l=0insert @re1 select @code,@father,@uom,@quantity,@lwhile @@rowcount>0beginset @l=@l+1insert @re1(code,father,uom,quantity,level1) select a.code,a.father,a.uom,a.quantity,@lfrom itt1 a,@re1 bwhere a.father=b.code collate database_defaultand b.level1=@l-1endreturnend⽤这个SQL我实现了这样⼀种功能:按销售订单查询成品的标准BOM清单,并计算需求。

输⼊成品的料号输出⽗料号、⼦料号、单位、⽤量、BOM级别关于B1的两个功能(⼆)按销售订单展开⽣产订单的⽤料清单简单的说:就是输出⼀个销售订单销售物料的⽣产订单⽤料清单CREATE function f_wo(@code_a varchar(20),@code_b varchar(20))returns @re1 table(DocEntry int,code varchar(20),father varchar(20),uom varchar(5), PlannedQty float,IssuedQtyfloat,level1 int)asbegindeclare @l intDECLARE @DocEntry INTdeclare @father varchar(20)declare @code varchar(20)declare @IssuedQty floatdeclare @PlannedQty floatdeclare @re2 TABLE (DocEntry int,code varchar(20),father varchar(20), PlannedQty float,IssuedQty float,OriginNum int)insert @re2(DocEntry,code,father,PlannedQty,IssuedQty,OriginNum) SELECT DiSTinct T1.DocEntry,T1.ItemCode,T0.ItemCode,T1.PlannedQty, T1.IssuedQty ,T0.OriginNum from OWOR T0 INNER JOIN WOR1 T1 ON T0.DocEntry =T1.DocEntry where t0.OriginNum = @code_aset @l=0insert @re1(code,father,PlannedQty,IssuedQty,level1) select @code_b,@father,@PlannedQty,@IssuedQty,@lwhile @@rowcount>0beginset @l=@l+1insert @re1(DocEntry,code,father,IssuedQty,PlannedQty,level1) select DiSTincta.DocEntry,a.code,a.father,a.IssuedQty,a.PlannedQty,@lfrom @re2 a,@re1 bwhere a.father=b.code collate database_defaultand b.level1=@l-1endreturnend--------------这个就是按单⽣产的SQL。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直接用SQL写出带扩展数量的BOM多级清单。

某项目需要,不能写函数,必须直接用SQL,性能差点没关系。

客户BOM有副产品,也有为0的情况,也就是组件数量有正、负、0,所以情况稍微麻烦了点
只用SQL的原因可能为:
因为没有权限去修改和定义程序。

我们唯一能用的手段就是Discover Report,因此需要用SQL来实现多级BOM展开。

with t as(
SELECT anization_id,
anization_id || '>' || connect_by_root assembly_number ||
sys_connect_by_path(ponent_number, '>') code_chain,
anization_id || '>' || connect_by_root bill_sequence_id ||
sys_connect_by_path(ponent_sequence_id, '>') id_chain,
connect_by_root assembly_number assembly_number,
boms.assembly_description,
LEVEL bom_level,
ponent_number component_number,
lpad(' ', (LEVEL - 1) * 2, ' ') || ponent_number
ind_component_number,
ponent_description,
boms.primary_uom_code uom,
ponent_quantity component_quantity,
boms.planning_factor,
ponent_yield_factor,
boms.effectivity_date
FROM (SELECT anization_id,
bom1.assembly_item_id,
mst1.segment1 assembly_number,
mst1.description assembly_description,
bom1.bill_sequence_id bill_sequence_id,
bom1.alternate_bom_designator assembly_alternate,
ponent_sequence_id,
ponent_item_id,
mstc.segment1 component_number,
mstc.description component_description,
mstc.primary_uom_code,
ponent_quantity,
bomc.effectivity_date,
bomc.planning_factor,
ponent_yield_factor,
bomc.supply_subinventory
FROM apps.bom_bill_of_materials bom1,
inv.mtl_system_items_b mst1,
apps.bom_inventory_components bomc,
inv.mtl_system_items_b mstc
WHERE anization_id = anization_id
AND bom1.assembly_item_id = mst1.inventory_item_id
AND bom1.bill_sequence_id = bomc.bill_sequence_id
AND anization_id = anization_id
AND ponent_item_id = mstc.inventory_item_id
--Item
AND mst1.bom_enabled_flag = 'Y'
AND mst1.bom_item_type IN (1, 2, 3, 4) --Dependent
--BOM Header
AND bom1.assembly_type = 1 --1 Manufature,2 ENG
AND nvl(bom1.effectivity_control, 1) <= 3
--BOM Line
AND nvl(bomc.disable_date, SYSDATE) >= SYSDATE
AND bomc.effectivity_date <= SYSDATE
AND bomc.implementation_date IS NOT NULL
AND nvl(bomc.eco_for_production, 2) = 2
--Filters
AND anization_id = 207
AND bom1.alternate_bom_designator IS NULL) boms CONNECT BY PRIOR anization_id = anization_id AND PRIOR ponent_item_id = boms.assembly_item_id )
SELECT anization_id,
t1.code_chain,
t1.assembly_number,
t1.assembly_description,
t1.bom_level,
ponent_number,
ponent_description,
t1.uom,
t1.ind_component_number,
t1.id_chain,
ponent_quantity,
(SELECT power(10,
SUM(CASE
WHEN ponent_quantity = 0 THEN
ELSE
log(10, abs(ponent_quantity))
END)) *
decode(MOD(COUNT(decode(sign(ponent_quantity), -1, 1)), 2), 1, -1, 1) *
(CASE
WHEN COUNT(decode(ponent_quantity, 0, 1)) >= 1 THEN
ELSE
1
END)
FROM t t2
WHERE t1.id_chain LIKE t2.id_chain || '%') extended_quantity,
t1.planning_factor,
ponent_yield_factor,
t1.effectivity_date
FROM t t1
ORDER BY t1.id_chain;。

相关文档
最新文档