(오라클)이런것도 쿼리문으로 가능할까요? 0 1 959

by 일우입니담 [SQL Query] 쿼리 오라클 [2020.11.27 16:44:11]


A라는 테이블에 seq를 참조하는 테이블이 B,C,D가 있습니다. 

각가의 데이터의 갯수는 다 다를때 참조하는 row가 가장 많은 테이블을 기준으로 row가 생성되고 없는값은 빈값으로 모두를 출력할 방법이 있을까요?

예를들어

A.SEQ B.NAME C.TYPE D.AGE
1 NAME1 TYPE1 AGE1
  NAME2 TYPE2 AGE2
    TYPE3 AGE3
    TYPE4  

B,C,D테이블은 각각 A의 SEQ1을 참조하는 값들입니다. 중요한건 예제처럼 값들은 위에서 부터 채워져서 없는값들은 모두 아래에 있어야 합니다.

 

이게 가능할까요..?

by 마농 [2020.11.30 15:10:54]

가능은 합니다.
다만, 꼭 이래야만 하는가? 연관 없는 자료끼리의 조인이 과연 필요한가? 하는 의문은 남습니다.
ONE 쿼리가 항상 좋은 것은 아닙니다.
때로는 각각의 쿼리가 좋을 때가 있습니다.
 

SELECT a.seq
     , b.rn
     , MIN(b.name) name
     , MIN(b.type) type
     , MIN(b.age) age
  FROM a
     , (SELECT seq
             , ROW_NUMBER() OVER(PARTITION BY seq ORDER BY 1) rn
             , name
             , null type
             , null age
          FROM b
         UNION ALL
        SELECT seq
             , ROW_NUMBER() OVER(PARTITION BY seq ORDER BY 1) rn
             , null name
             , type
             , null age
          FROM c
         UNION ALL
        SELECT seq
             , ROW_NUMBER() OVER(PARTITION BY seq ORDER BY 1) rn
             , null name
             , null type
             , age
          FROM d
        ) b
 WHERE a.seq = b.seq(+)
 GROUP BY a.seq, b.rn
 ORDER BY a.seq, b.rn
;

 

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