CASE WHEN 문에 대해 질문이 있습니다 0 2 132

by 킹오 [Oracle 기초] [2020.05.22 15:51:28]


123123132123.PNG (104,993Bytes)

안녕하세요

 

case when then~ 문은 예를들어

case when 이름 = '킹오' then '오킹' 

특정 컬럼의 값이 A일때 이를 B라고 바꾸는 것으로 알고 있는데요

 

저 then 뒤에 select문을 넣어서 조회하는 방법이 문법적으로 맞는지 궁금합니다.

예를들어..

검색을 하고 싶은데 셀렉트 박스, 검색창 2개가 있습니다.

사진과 같은 검색창입니다.

 

'전체'를 클릭하면 하위의 메뉴, 예를들어 식품, 전자제품, 생필품 등등이 나오게 될 겁니다.

여기서 저는 식품, 전자제품, 생필품을 seletbox로 만들어 놓은 상태이고(jsp단에서) 무엇을 클릭하느냐에 따라 

검색되는 값이 다르게 나오게 하고 싶습니다.

식품을 선택하고 조회하면 식품만 나오게끔요.

테이블은 여러 컬럼이 있지만 필요한 컬럼만 말씀드리면 이렇게 구성되어 있습니다.

key search
10 냉장고
20 사과

 

이 부분에서 저는

(key는 분류, search는 검색한 단어 입니다.)

case 
    when key = 전자제품 then (
        select * from TABLE where key = 10 AND search = ? )
    when key = 생필품 then (

         select * from TABLE where key = 20 AND search = ? )

    ELSE END

 

이렇게 짜 봤는데 테스트를 할 수 없는 조건이라서요.

 

이 문법이 맞는지 궁금합니다.. 그리고 아니라면 어떠한 방식으로 조회해야하는지 궁금합니다. 

 

 

 

by 마농 [2020.05.22 16:30:21]

왜?
CASE 안에 SELECT 를 넣나요?
SELECT 안에 CASE 를 넣어야죠.
 

SELECT *
  FROM t
 WHERE 1=1
   AND search = ?
   AND key = DECODE(?, '전자제품', 10, '생필품', 20)
   AND key = CASE ? WHEN '전자제품' THEN 10 WHEN '생필품' THEN 20 END
;

 


by 춘 [2020.05.22 20:59:31]

이 질문의 문제는

쿼리쪽보다는 JSP 화면단의 활용 능력과 이해도의 문제가 아닌지요?

화면단 구성에서 Framework 를 활용한 Selectbox 선택 시 option 의

key 값을 Controller => Service => 실질적인 쿼리를

태우는 작업등에 대한 이해도가 선행되어야 할것 같네요.

예를 들어,

SelectBox option 이 아래와 같다고 가정하면,

key : 10 / value :  식품

key : 20 / value :  전자제품

key : 30 / value :  생필품

여기서 selected 를 1번 key : 10 / value : 식품을 선택하게 되면,

Parameter 로 SelectBox 의 name 에 해당하는 key 변수가 Controller 및

VO 에 setting 이 될것이며(request.getParameter 등 포함)

쿼리에서 key = 10 인 것만 조회하면 되지 않나요?

SELECT * FROM TABLE WHERE key = 10;

만약, 추가로 검색 상품 키워드를 포함하려고 가정하면,

SELECT * FROM TABLE WHERE key = 10 AND keyword LIKE %search%;

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