특정 조건절의 결과가 없으면 다른 조건의 결과를 찾는 쿼리 0 3 2,016

by 강태훈 [2012.02.18 00:18:24]


안녕하세요?

한참을 고민해도 답이 잘 나오지 않아 질문글을 남깁니다.

테이블이 아래와 같이 있다면

table
code          value
------------------------
aaa            1000
bbb            2000
ccc            3000

select value
from table
where code = 'ddd'

위의 쿼리를 날리면 값이 없을겁니다.

없을 경우에 

select value
from table
where code = 'ccc'

의 결과값에 해당하는 값을 구해야 합니다.

만약 테이블이

table
code          value
------------------------
aaa            1000
bbb            2000
ccc            3000 
ddd            4000

위와 같이 있다면 'ddd'에 해당하는 value 값이 구해져야 되구요..

이것을 pl/sql을 안쓰고 구하는 쿼리를 어떻게 짜야 될지 모르겠네요..

도움을 부탁드립니다.

감사합니다.
by bov [2012.02.18 13:43:33]
select *
from t
where cd = :cd
or (cd = 'ccc' and not exists (select 1 from t where cd = :cd))

by 제로 [2012.02.20 09:22:36]
with t as
(select 'aaa' code, 1000 value from dual
union all select 'bbb', 2000 from dual
union all select 'ccc', 3000 from dual
union all select 'ddd', 4000 from dual
)
select code, value
from (select code
, value
, row_number() over(order by decode(code, :code1, 1, :code2, 2)) gb
from t where code in (:code1, :code2) )
where gb = 1;

by 강태훈 [2012.02.20 10:44:19]
정말 큰 도움이 됐습니다!!

답변주셔서 정말 감사합니다. ^^

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