SAP/ABAP_SQL

HANA BOM Multi level explosion with HIERARCHY

Denise 2024. 8. 7. 16:02

with bom as (
SELECT * 
  FROM HIERARCHY (
    SOURCE (
    
           SELECT m1.mandt
                , m1.stlnr
                , m1.stlal
                , m1.stlan
                , s1.stlty
                , s1.stlkn
                , m2.stlnr  as child_bom
 
                , m1.matnr  as parent_id
                , p1.posnr
                , p1.idnrk  as node_id
           
             FROM mast m1
             JOIN stas s1
               ON s1.mandt = m1.mandt
              AND s1.stlty = 'M'
              AND s1.stlnr = m1.stlnr
              AND s1.stlal = m1.stlal
              AND s1.lkenz = ' '
             LEFT OUTER JOIN stas s2
               ON s2.mandt = s1.mandt
              AND s2.stlty = s1.stlty
              AND s2.stlnr = s1.stlnr
              AND s2.stlal = s1.stlal
              AND s2.stlkn = s1.stlkn
              AND s2.lkenz = 'X'
             JOIN stpo p1
               ON p1.mandt = s1.mandt
              AND p1.stlty = s1.stlty
              AND p1.stlnr = s1.stlnr
              AND p1.stlkn = s1.stlkn
             LEFT outer JOIN mast as m2
               ON m2.mandt = m1.mandt
              AND m2.werks = m1.werks
              AND m2.matnr = p1.idnrk
              AND m2.stlan = m1.stlan
              AND m2.stlal = m1.stlal
              
            WHERE m1.cslty = ' '
              AND m1.stlan = '1'
              AND m1.werks = '1000'
              AND m1.mandt = '100'
              AND s1.datuv <= to_char(current_date,'yyyymmdd')
              AND ( coalesce(s2.datuv,'99991231') > to_char(current_date,'yyyymmdd') )
            )
            SIBLING ORDER BY posnr
            ORPHAN ROOT
            CYCLE BREAKUP
      )
   )

SELECT
         m1.werks
       , ltrim(m1.matnr,'0') as matnr
       , t1.maktx
       , s1.stlal
       , m.HIERARCHY_level
       , p1.posnr

       , sk.bmeng
       , r1.mtart

       , ltrim(p1.idnrk,'0') as idnrk
       , t2.maktx as idntx
       , p1.menge
       , s1.aennr
       , s1.datuv
       , s2.aennr AS aenra
       , coalesce(s2.datuv,'99991231') AS datub
       , r2.mtart AS mtart_p

       , case c1.sobsl when '50' then 'X' end as dumps
       , c1.beskz
       , c1.sobsl
       , p1.sortf 
       , p1.meins AS kmpme
       , p1.rekri
       , p1.rekrs

  FROM HIERARCHY_DESCENDANTS ( 
      SOURCE bom 
      START WHERE parent_id = '000000000041000188'
     ) as m
  JOIN stas s1
    ON s1.mandt = m.mandt
   AND s1.stlty = m.stlty
   AND s1.stlnr = m.stlnr
   AND s1.stlal = m.stlal
   AND s1.stlkn = m.stlkn
   AND s1.lkenz = ' '
  JOIN stko sk
    ON sk.mandt = m.mandt
   AND sk.stlty = m.stlty
   AND sk.stlnr = m.stlnr
   AND sk.stlal = m.stlal
  JOIN mast m1
    ON m1.mandt = m.mandt
   AND m1.stlnr = m.stlnr
   AND m1.stlal = m.stlal
   AND m1.stlan = m.stlan
  LEFT OUTER JOIN stas s2
    ON s2.mandt = s1.mandt
   AND s2.stlty = s1.stlty
   AND s2.stlnr = s1.stlnr
   AND s2.stlal = s1.stlal
   AND s2.stlkn = s1.stlkn
   AND s2.lkenz = 'X'
  JOIN stpo p1
    ON p1.mandt = s1.mandt
   AND p1.stlty = s1.stlty
   AND p1.stlnr = s1.stlnr
   AND p1.stlkn = s1.stlkn
 

  JOIN mara r1
    ON r1.mandt = m1.mandt
   AND r1.matnr = m1.matnr
  JOIN makt t1
    ON t1.mandt = r1.mandt
   AND t1.matnr = r1.matnr
   AND t1.spras = '3'

  JOIN mara r2
    ON r2.mandt = p1.mandt
   AND r2.matnr = p1.idnrk
  JOIN makt t2
    ON t2.mandt = r2.mandt
   AND t2.matnr = r2.matnr
   AND t2.spras = '3'
   
  JOIN marc c1
    ON c1.mandt = p1.mandt
   AND c1.matnr = p1.idnrk
   AND c1.werks = m1.werks


 ORDER BY m.start_rank
        , m.hierarchy_rank

'SAP > ABAP_SQL' 카테고리의 다른 글

Data Element / Domain info SQL  (0) 2015.05.20
ABAP calling native sql  (0) 2015.02.17
특성 값 리스트 조회 쿼리  (0) 2013.06.20
SAP table info from Oracle  (0) 2013.01.17