database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40958 게시물 읽기
No. 40958
where절에 in 조건에 case when 사용시
작성자
쿼리몰라요
작성일
2015-10-05 11:04
조회수
8,869

쿼리를 실행할때 조회조건에 따라서 case when을 사용합니다.

이때 when 조건에 따라 in에 들어가는 조건이 2개가 되는데 case when 때문에 적용이 안되는 것 같네요..

제가 아직 실력이 부족하여 발생된 문제인 것 같습니다.

 

해당 쿼리가 아래와 같은데 어느 부분에서 문제가 있는지 조언 부탁드립니다.

 

AND NVL(gubun_cd, '') IN (CASE WHEN gubun_cd = '01' then NVL('',gubun_cd)

when gubun_cd = '04' then ('04')

when gubun_cd = '05' then ('04','05')

END)

 

gubun_cd 가 '05'인 경우 해당 코드값 '04','05'를 모두 조회해야 되는데 이 방법으로 하면 오류가 발생됩니다.

이 방법으로 어렵다면 혹시 다른 방법으로 구할 수 있는지도 궁금합니다.

 

조언 감사드리며, 즐거운 한 주 되시길 바랍니다.

이 글에 대한 댓글이 총 5건 있습니다.

함수는 값을 반환합니다.
구문을 반환히는 것이 아니죠.
('04','05') 은 값이 아니므로 안되는 것입니다.


Case 문을 바꾸어 드리려고 봤더니...
구문이 이상해서 못하겠네요.
비교구문의 좌우가 모두 동일항목인 gubun_cd 로 비교하네요.
아무리 봐도 이상하네요.

마농(manon94)님이 2015-10-06 09:02에 작성한 댓글입니다.

마농님 댓글 감사합니다.

 

해당 구문이 내포하는 의미는

gubun_cd in (gubun_cd...) 입니다.

 

case when에 있는 gubun_cd는 조회하는 사람의 gubun_cd 값에 따라 변동될 수 있도록 짜다보니 그렇게 되었습니다. 조회자의 권한에 따라 gubun_cd가 다르게 조회되도록 한 것이죠..

 

예를 들어 A라는 사람의 gubun_cd가 '01' 이라면

and nvl(gubun_Cd,'') in ('01')

 

B라는 사람의 gubun_Cd가 '05'라면

and nvl(gubun_Cd,'') in ('04','05')

 

이렇게 조회되도록 하고 싶었던 겁니다.

 

한번만 더 확인 부탁드리겠습니다.

 

감사합니다.

쿼리몰라요님이 2015-10-06 13:38에 작성한 댓글입니다. Edit

다음은 입력되는 :v_gubun_cd 로 검색하되
:v_gubun_cd 가 '05' 인 경우에만 '04' 가 함께 조회되도록 하는 방법입니다.
 WHERE gubun_cd IN (:v_gubun_cd, DECODE(:v_gubun_cd, '05', '04))


요건이 더 복잡하다면? 보충설명 해주세요.

마농(manon94)님이 2015-10-06 13:56에 작성한 댓글입니다.

조건문 상에서만 처리가 되어도 좋겠지만

저런 경우, 별도 테이블로 해당조건과 대응되는 값들을

넣어두고, 별도 테이블과 실 테이블 조인해서 처리해도 되지 않나요??

In이 아닌 Exists 로 처리하면 간단히 처리가 될듯한데요..

 

해당 조건들이 늘어난다면 별도테이블로 값을 저장해두고

변경될 소지가 없다면 with 구문으로 처리하면 될듯해요.

최한영(terry0515)님이 2015-10-06 14:13에 작성한 댓글입니다.

마농님, 최한영님 감사합니다.

 

요건이 조금 더 복잡하긴한데, 마농님께서 알려주신 방법을 토대로

조회조건을 변경하여 처리하였습니다.

 

잘 되는것 같습니다.

 

별도 테이블로 빼긴 좀 애매했습니다. 요건이 몇가지가 더 있었는데 그 부분을 제가 쉽게 생각하고 설명을 드리지 않았던것 같습니다.

 

exists, with 구문은 생각도 못해봤네요..

새로운 방법에 대한 부분도 고민할 수 있는 기회였습니다.

 

다시한번 저희 미천한 실력을 파악했습니다. 더욱 노력해야 겠네요

쿼리몰라요님이 2015-10-07 10:46에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40961최근 등록일의 데이타를 가져오는 쿼리 질문 [4]
김씨
2015-10-07
8381
40960오라클 10g for solaris(SPARC)을 윈2012 r2에 설치 가능한가요? [1]
궁금이
2015-10-07
8026
40959처리 결과에 대해서 여쭤봅니다..
이성호
2015-10-06
8124
40958where절에 in 조건에 case when 사용시 [5]
쿼리몰라요
2015-10-05
8869
40956기준율을 적용해서 업체별 순위를 표시하고 싶습니다. [2]
써니
2015-10-02
9312
40955shared라는건 어떤 기능의 옵션 인가요? [2]
whiteboy
2015-10-01
8425
40954새로이 덤프를 떠서 적용하려고 합니다. [1]
박현수
2015-10-01
7904
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다