오라클 쿼리 질문입니다. 제 실력으론 잘 안되네요 ㅠ 상위ID값 기준으로 각각 행을 표현하고싶을때 0 1 734

by 십이장기 [SQL Query] [2020.09.23 16:50:23]


현재 테이블A에

 

A테이블 데이터

 

id              par_id           name                type

 

11             13                TT의자식1         String

12             13                TT의자식2         String

13             null               TT                   Array

14             16                SS의 자식1        String

15             16                SS의 자식2        String

16             null               SS                   Object

17             null               GG                  String

 

이런식으로 데이터가 있을때

 

결과값으로

 

이름                     Type 

                    

TT                        Array     

TT[].TT의자식1        String

TT[].TT의자식2        String

SS                       Object 

SS.SS의자식1         String

SS.SS의자식2         String

GG                      String

 

이런식으로 상위 ID값이 있는걸 기준으로 각각 부모에 맞는 자식을 다 표현하고 다음 부모와 자식 관계 순서로 order by 하여

보여주고싶습니다.

결과로의 이름같은경우에는 값이 상위 ID의 Type이  Array일때 상위ID값의 이름에 [] 와 .(점)을 붙여서

즉, 상위ID값의 이름 + [](괄호) + .(점)   을 더한후에 자식 이름의 값을 각각의 행으로 표현하고 싶습니다

반대로 상위ID값의 Type이 Object일땐 [[을 뺀 .(점)만 붙이고 싶습니다

제 부족한 오라클 실력으론 잘 안되네요 ㅠㅠ 혹시 방법이 있을까요?

by 마농 [2020.09.23 18:26:39]
WITH t AS
(
SELECT 11 id, 13 par_id, 'TT의자식1' name, 'String' type FROM dual
UNION ALL SELECT 12,   13, 'TT의자식2' , 'String' FROM dual
UNION ALL SELECT 13, null, 'TT'        , 'Array'  FROM dual
UNION ALL SELECT 14,   16, 'SS의 자식1', 'String' FROM dual
UNION ALL SELECT 15,   16, 'SS의 자식2', 'String' FROM dual
UNION ALL SELECT 16, null, 'SS'        , 'Object' FROM dual
UNION ALL SELECT 17, null, 'GG'        , 'String' FROM dual
)
SELECT id, par_id, name, type
     , LEVEL lv
     , SYS_CONNECT_BY_PATH(name || DECODE(type, 'Array', '[]'), '.') x
  FROM t
 START WITH par_id IS NULL
 CONNECT BY PRIOR id = par_id
 ORDER SIBLINGS BY id
;

3. 계층구조 쿼리(Hierarchical Queries)의 이해
3.1. 계층구조 쿼리(Hierarchical Queries)란?
3.2. 계층구조 쿼리의 활용

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