FROM TO LOCATION PAIR만들기 0 3 796

by 이석준 [2018.12.10 23:29:05]


IND LOCATION
FROM 부산
FROM 대구
TO 서울
TO 광주

IND컬럼에 FROM과 TO가 둘다 있을 수도 있고 한개씩만 있을 수도 있습니다.

CASE1) TABLE에 FROM만 있을 경우

부산 - ALL

대구 - ALL

CASE2) TABLE에 TO만 있을 경우

ALL-서울

ALL-광주

CASE3)위처럼 FROM, TO가 다 있을경우

부산-서울

대구-서울

부산-광주

대구-광주

 

TABLE설계가 잘 못된건지 머리르 써봐도 잘 안되네요...

도움 부탁드립니다. 감사합니다.

by 마농 [2018.12.11 08:32:36]
WITH t AS
(
SELECT '' ind, '' location FROM dual WHERE 1=2
UNION ALL SELECT 'FROM', '부산' FROM dual
UNION ALL SELECT 'FROM', '대구' FROM dual
--UNION ALL SELECT 'TO', '서울' FROM dual
--UNION ALL SELECT 'TO', '광주' FROM dual
)
SELECT NVL(a.location, 'ALL') location_from
     , NVL(b.location, 'ALL') location_to
  FROM (SELECT * FROM t WHERE ind = 'FROM') a
  FULL OUTER JOIN
       (SELECT * FROM t WHERE ind = 'TO'  ) b
    ON 1=1
;

 


by 이석준 [2018.12.11 09:04:14]

헛...대단하십니다. 

감사합니다. 종종 더 도움을 요청드릴 일이 있을꺼 같습니다. 이번 한주도 화이팅하세요.


by 마농 [2019.05.30 11:40:50]
WITH t AS
(
SELECT '' ind, '' location FROM dual WHERE 1=2
UNION ALL SELECT 'FROM', '부산' FROM dual
UNION ALL SELECT 'FROM', '대구' FROM dual
--UNION ALL SELECT 'TO', '서울' FROM dual
--UNION ALL SELECT 'TO', '광주' FROM dual
)
SELECT CONNECT_BY_ROOT(location) location_from
     , DECODE(LEVEL, 1, 'ALL', location) location_to
  FROM t
 WHERE CONNECT_BY_ISLEAF = 1
 START WITH ind = 'FROM'
 CONNECT BY LEVEL <= 2
   AND PRIOR ind != ind
;

 

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