in

SDT Community Server

SDT Forums, Blogs, Photos server.

This Blog

Syndication

Coolboy

bom表展开

我在SQL数据库里有一个BOM表简单如下:
母件号    子件号                                    但要通过SQL编程使它运行结果为:
Y01        Y02                                         母件号    层次     子件号
Y01        Y03                                          Y01         1         Y02
Y01        Y04                                          Y01        .2         Y05
Y02        Y05                                          Y01       ..3         Y06
Y05        Y06                                          Y01         1         Y03
Y04        Y06                                          Y01         1         Y04
Y04        Y07                                          Y01        .2         Y06
                                                             Y01        .2         Y07

 

 

设定BOM表的个列的列名分别为mj,zj,下面的SQL能够输出你要的结果。
SELECT 'Y01' dcmj --顶层母件
       ,CASE a.le
        WHEN 1 THEN '1'
        WHEN 2 THEN '.2'
        WHEN 3 THEN '..3'
        END le
       ,a.zj
FROM (
SELECT mj,zj,LEVEL le
FROM BOM
START WITH mj='Y01'
CONNECT BY mj= PRIOR zj) a
 
 
baan code
 
SELECT '         0006100104' dcmj --顶层母件
       ,DECODE(a.le ,1,'1',2,'.2',3 ,'..3') AS currlevel       ,t$sitm
FROM (
SELECT t$mitm,t$sitm,LEVEL le
FROM baan.ttibom010231
START WITH t$mitm='         0006100104'
CONNECT BY t$mitm= PRIOR t$sitm) a
 
 
Published Jul 02 2009, 04:10 PM by Coolboy
Filed under:

Comments

 

slash said:

顶一下。

顺便参考:10.180.0.10/.../oracle-sql-sql.aspx

July 2, 2009 4:27 PM
 

wego said:

Oracle 对阶梯表有很好的支持!

也可写成

SELECT     CONNECT_BY_ROOT mj, zj, LPAD ('.', LEVEL - 1, '.') || LEVEL le

     FROM bom

START WITH mj = 'Y01'

CONNECT BY mj = PRIOR zj

而且支持根节点不只是 Y01 的情况.

如新增一条记录:  X01 X02

July 7, 2009 9:01 AM
Copyright SDT, 2006-2009. All rights reserved.