트리구조에서 같은 자식 구조끼리 합치기 0 2 827

by MS [Oracle 기초] [2018.11.09 14:54:26]


PIC.png (20,150Bytes)

WITH source (seq, pid, id, age, country, sex, qty) as
(
    SELECT 1,  '-1', 'TOP', '',   '',        '',  0 from dual UNION ALL
    SELECT 2,  'TOP', 'A',  '',   '',        '',  0 from dual UNION ALL
    SELECT 3,  'A',   'B',  '20', 'FRANCE',  'M', 2 from dual UNION ALL
    SELECT 4,  'A',   'C',  '15', 'ITALY',   'F', 2 from dual UNION ALL
    SELECT 5,  'A',   'C',  '15', 'ITALY',   'F', 3 from dual UNION ALL
    SELECT 6,  'A',   'C',  '15', 'ITALY',   'F', 1 from dual UNION ALL
    SELECT 7,  'A',   'D',  '30', 'ENGLAND', 'F', 4 from dual UNION ALL
    SELECT 8,  'TOP', 'E',  '',   '',        '',  0 from dual UNION ALL
    SELECT 9,  'E',   'F',  '45', 'ITALY',   'F', 3 from dual UNION ALL
    SELECT 10, 'E',   'G',  '10', 'HONGKONG','F', 2 from dual UNION ALL
    SELECT 11, 'E',   'H',  '25', 'JAPAN',   'M', 2 from dual UNION ALL
    SELECT 12, 'E',   'H',  '25', 'JAPAN',   'M', 3 from dual UNION ALL
    SELECT 13, 'E',   'H',  '25', 'JAPAN',   'M', 1 from dual UNION ALL
    SELECT 14, 'E',   'H',  '25', 'ENGLAND', 'F', 2 from dual UNION ALL
    SELECT 15, 'E',   'I',   '8', 'UK',      'M', 2 from dual
);

하나의 부모밑에 여러개 자식이 있을수 있습니다. 기본은 한개 입니다.

1) 수량을 제외한 모든 자식 정보가 같으면 하나로 합칩니다. 수량은 합칩니다.

2) 모든 자식정보의 속성이 다르면 같은것 끼리 합칩니다. 물론 수량도 같은것끼리 합칩니다. 이 경우는 chk속성에 'F'정보를 넣어준다.

 

감사합니다.

by 마농 [2018.11.12 11:41:49]
SELECT *
  FROM (SELECT MIN(seq) seq
             , pid, id, age, country, sex
             , SUM(qty) qty
             , DECODE(COUNT(*) OVER(PARTITION BY id), 1, '', 'F') chk
          FROM source
         GROUP BY pid, id, age, country, sex
        )
 START WITH pid = '-1'
 CONNECT BY PRIOR id = pid
 ORDER SIBLINGS BY seq
;

 


by MS [2018.11.12 14:55:38]

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입