오라클 조건문 0 9 681

by 아침이네 [Oracle 기초] 오라클 [2021.10.27 10:51:31]


오라클에서 case when 으로 조건문을 설정하는데

혹시 a값이 있으면  a라는 select문 쿼리가 실행하고 a값이 없으면 b라는 select 쿼리문이 실행되도록

특정값이 있냐 없냐에 따라서 실행하는 쿼리가 달라지게 할 수 있나요?

by isNull [2021.10.27 10:59:31]

보통 그런식으로 할거면

 

---

select *

from tab

where 1 = 1

and a is null

union all

select *

from tab

where 1 = 1

and a is not null

---

이런식으로 하죠.

 

p.s. 아... a가 변수값이 아니라 쿼리의 값이 없으면 다음게 돈다는거군요

그럼 with a as (select count(1) as cnt from ...) 형식으로 돌려서 a.cnt 를 조건절에 줘도 될거 같습니다


by 아침이네 [2021.10.27 11:10:31]

a가 null 인 것과 null 이지 않은 조건의 값들을 전부 합친거 아닌가요?


by 마농 [2021.10.27 11:03:55]

a 값의 유무에 따라 쿼리문이 달라진다는 것인데?
a 가 뭔가요? 입력 조건 변수인지? 테이블 컬럼인지?
쿼리문이 달라진다는데? 어떻게 다른지? 구체적으로.
구체적인 상황에 맞춰 쿼리문을 작성하는 것이므로
지금처럼 추상적 질문에는 쿼리문이 구체화 될 수 없습니다.


by 아침이네 [2021.10.27 11:07:46]

a 는 입력 조건 변수를 말한 것입니다. 


by 마농 [2021.10.27 11:20:10]

쿼리문이 어떻게 다른지?
간략한 예시 쿼리 보여주세요.


by isNull [2021.10.27 11:19:28]

a 가 변수고 a가 null이나 not null 이나 이게 문제면 제가 첨에 달은 답변으로하시면 됩니다.

 

union all 이 있지만...

 

어차피 a가 null 이면 union all 위의 쿼리만 돌고 not null 이면 아래 쿼리만 돕니다.


by 우주민 [2021.10.27 11:20:44]

쿼리문 자체가 변경되는 것이라면 첫번째 답변처럼 

a 조건이 맞을 경우의 쿼리

union all

a 조건이 안맞을 경우의 쿼리

형태가 되는게 맞아보이고...

 

혹시나 조건에 따라 특정 컬럼을 매칭 시키는 형태라면 decode 문 등으로 하나의 쿼리로 처리가 가능할거 같기는 하네요.

 

 

 


by 아침이네 [2021.10.27 13:23:32]

쿼리를 정리해서 다시 글 올립니다. 제가 내용을 착각했습니다....

B.SUBCODE 가 NULL 인 것이 아니라 조건에 없으면

SELECT A.CODE, A.VALUE  FROM A, B

WHERE A.CODE=B.SUBCODE AND B.NO='123'

GROUP BY A.CODE, A.VALUE ORDER BY A.CODE

 

조건에 있으면

SELECT A.CODE, A.VALUE  FROM A, B

WHERE A.CODE=B.SUBCODE AND B.NO='123' AND B.SUBCODE='123001'

GROUP BY A.CODE, A.VALUE ORDER BY A.CODE

 

하도록 실행하고 싶은 것입니다.

 


by 마농 [2021.10.27 13:34:02]
SELECT a.code, a.value
  FROM a
     , b
 WHERE a.code = b.subcode
   AND b.no = '123'
   AND ( :v_subcode IS NULL OR b.subcode = :v_subcode )
 GROUP BY a.code, a.value
 ORDER BY a.code
;
SELECT a.code, a.value
  FROM a
     , b
 WHERE a.code = b.subcode
   AND b.no = '123'
   AND b.subcode = NVL(:v_subcode, b.subcode)
 GROUP BY a.code, a.value
 ORDER BY a.code
;

 

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