SQL case문 질문있습니다.

조회수 1589회

sql문은 처음 접해 궁금한점이 있습니다. 조건 식 설정할때 case문을 사용하는걸 알았는데

CASE 컬럼명 | 표현식 WHEN 조건식1 THEN 결과1 WHEN 조건식2 THEN 결과2 ....... WHEN 조건식n THEN 결과n
END 값

이렇게 참고하여 만들었습니다.

select a,
case when test = '1' then test_time1 end value1,
case when test = '1' then test_time1 else test_time2 end value2,
from test_table where and test ='1' order by value1

이렇게 했는데 궁금한게 case test ='1' 값이 0일때도 값을 표현해야하는데 예)

a             value1               value2          
-----------------------------------------------------
1             xx:xx                 xx:xx:xx      1값
2             None                 xx:xx:xx      0값

이렇게 나오게 하려면

from test_table where and test ='1' order by value1

이문장은 수정해야하는데... test='1'값을 0으로 바꾸면 0값은나오는데 1값이 안나오고 ㅜㅜ;; or test = '0' 이렇게 추가해도 마찬가지인데... 지도 부탁드립니다. ㅜㅜ

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 무슨 말인지 잘 모르겠어요. 맨 위 코드의 4번째 줄에 `where and test = '1' order by value1` 부분이 있는데요. 여기서 이미 test = '1'이란 조건을 걸었는데 case에서 왜 다시 조건을 걸은건가요? case문의 test = '1'은 아무 의미 없는걸로 보이는데... 편집요청빌런 2017.6.14 17:46
  • 음 글로 설명하기게 애매하네요 ㅜㅜ... 'test =1 ' 'test = 0' 에 따라 나오는 값이 아예 달라... test =1, test=0 값이 한번에 나오게 할려고 `where and test = '1' order by value1` 부분에 or test = '0' 이렇게 수정해봤는데 잘안되네요... 알 수 없는 사용자 2017.6.17 08:39

1 답변

  • test가 1일때에는 (value1, value2)를 test가 0일때에는 (None, value2)를 조회되게 만들고 싶다는건가요?

    그렇다면 다음 쿼리를 사용해보세요.

    CREATE TABLE IF NOT EXISTS `test_table` (
      `a` int(6) unsigned NOT NULL,
      `test` int(3) unsigned,
      `value1` int(3) unsigned,
      `value2` int(3) unsigned,
      PRIMARY KEY (`a`)
    ) DEFAULT CHARSET=utf8;
    INSERT INTO `test_table` (`a`, `test`, `value1`, `value2`) VALUES
      ('1', '1', '1', '2'),
      ('2', '0', '1', '3');
    
    select a, 
    case when test = '1' then value1 else 'None' end,
    value2
    from test_table where test in ('0', '1')
    

    위 코드는 http://sqlfiddle.com 에서 실행해볼 수 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)