SELECT시 칼럼값에 따라 다르게 표시할수있는 방법이 궁금합니다. 0 3 1,195

by 지침 [2017.06.05 14:39:21]


안녕하세요. 비슷한 문제로 예전에 질문을 올렸다가 로직변경으로 수정해보려했으나.. 어려워서.. 다시 질문올립니다 (__)

tableA 

type  | name 

0        | park  

0        | kim

0        | woo

1         | lee

1         | jang

2        | jang

2        | park

2        | yun

 

tableB

type | name

1     |    AA

2    |    BB

3    |    CC

1) tableA.type이 0일때 -> 3개의 값 그대로 표시하고,

=> 예상값 (park,kim,woo)

2) tableA.type이 0이 아닐때 -> tableA.type이 여러개의 값이라도 하나만 나왔으면 합니다. tableA.type = tableB.type 

=> 예상값 (AA,BB)

=> 결과 ( park,kim,woo,AA,BB )

 

감사합니다.

by 마농 [2017.06.05 15:07:53]
WITH tableA AS
(
SELECT 0 type, 'park' name FROM dual
UNION ALL SELECT 0, 'kim'  FROM dual
UNION ALL SELECT 0, 'woo'  FROM dual
UNION ALL SELECT 1, 'lee'  FROM dual
UNION ALL SELECT 1, 'jang' FROM dual
UNION ALL SELECT 2, 'jang' FROM dual
UNION ALL SELECT 2, 'park' FROM dual
UNION ALL SELECT 2, 'yun'  FROM dual
)
, tableB AS
(
SELECT 1 type, 'AA' name FROM dual
UNION ALL SELECT 2, 'BB' FROM dual
UNION ALL SELECT 3, 'CC' FROM dual
)
SELECT DISTINCT a.type
     , NVL(b.name, a.name) name
  FROM tableA a
     , tableB b
 WHERE a.type = b.type(+)
 ORDER BY type, name
;

 


by 지침 [2017.06.05 16:22:48]

마농님 항상 감사합니다!

덕분에 해결하게 됬습니다.

글에는 없지만 tableA에서 다른칼럼(idx)같은 것을 SELECT 했을때 그륩되지않고 풀려버리는데 해결할수있는방법이 있을까요?

SELECT DISTINCT a.type,

NVL(b.name, a.name) name, 

NVL(b.name, a.idx) idx  <--- 이런식으로 하니까 되긴하는데... 이렇게 하는게 맞는건가요?

 


by 마농 [2017.06.05 22:17:41]

원하는 결과가 나온다면 맞는거겠죠?

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