where절에서 if조건(DECODE) 사용방법에 대한 질문~ 0 4 1,152

by 에즈레인보우 [2013.12.03 15:22:49]




WHERE ~~~~~
AND ~~~~~~
AND ~~~~~
DECODE(I_CHECK,1,AND substr(A.acc_code,1,4) in ('5001','5002'),0,'NULL')
AND ~~~~~

Where구문에서 if조건을 사용하고 싶어서 decode문을 사용했는데, 제가 입문한지 얼마안되서

I_CHECK가 1이면 AND substr(A.code,1,4) in ('111','112') 쿼리하고, 0이면 그냥 넘어가겠다 인데

DECODE문으로 어떻게 작성을 하면 좋을지 자세한 설명 붙여주시면 감사하겠습니다.
by 아발란체 [2013.12.03 15:32:26]

DECODE로 조건을 분기 할 수는 없습니다.
말씀 하신 조건은 다음과 같이 기술이 될 것 같습니다.

WHERE
   조건1
   AND
   조건2
   AND (
  (I_CHECK = 1 AND SUBSTR(A.code,1,4) IN('111','112'))
OR
I_CHECK = 0
   )

괄호로 감싸는게 중요하며, SUBSTR 1, 4가 아니라 1, 3이 3자리를 자릅니다.
1,4 해서 짜른 4자리를 111 또는 112 비교하면 절대 일치할 일이 없겠죠. ^.^


by 에즈레인보우 [2013.12.03 15:42:02]
아발란체님. 정말 감사합니다^^ 덕분에 잘 배우고 갑니다,



by 아발란체 [2013.12.03 15:44:58]

감사합니다. ^.^


by Oracler [2013.12.03 16:20:24]
Decode는 함수이기 때문에 값이 반환되어야 합니다. 조건에 맞는 값을 리턴하는 함수죠. 근데 질문의 AND SUBSTR 이하는 값이 아니고 SQL문장의 일부이기 때문에 원하는대로 되지 않는 것입니다.
아발렌체님께서 대안을 잘 제시해주셨네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입