2017-09-19 19 views
0

UCO 열에 숫자 1 또는 2가 표시되도록하고 싶습니다. 실제 수치를 반환하고 싶은 다른 숫자는 숫자로 표시 할 수 있습니다. 그러나 현재 그것은 나와 내 사례 진술 때문에 NULL입니다.사례문에서 다른 결과를 모두 반환하는 방법

실제 인물을 보여주는 방법에 대한 아이디어가 있습니까?

SELECT S.STOPP_REAL_DELIVERY AS "Delivery Date", 
    case when C.COLLECT_COLLECTED_QTY = '-1' THEN '1' 
    when C.COLLECT_COLLECTED_QTY = '-2' THEN '2' END AS UCO 
FROM MBR_COLLECT C, 
    MBR_STOPP S, 
    MBR_JOURNEY J 
WHERE C.MARKET_CODE   = 'UK' 
AND C.COLLECT_TYPE_CODE  = 4 
AND C.STOPP_ID    = S.STOPP_ID 
AND J.JOURNEY_ID    = S.JOURNEY_ID 
AND J.JOURNEY_PLANNED_START >= '14-AUG-17'; 
+0

추가해야합니다. – Moudiz

답변

3

CASE 문에 ELSE 절을 추가 또한

SELECT S.STOPP_REAL_DELIVERY AS "Delivery Date", 
     CASE 
     WHEN C.COLLECT_COLLECTED_QTY = '-1' THEN '1' 
     WHEN C.COLLECT_COLLECTED_QTY = '-2' THEN '2' 
     ELSE C.COLLECT_COLLECTED_QTY 
     END AS UCO 
FROM MBR_COLLECT C 
     INNER JOIN MBR_STOPP S 
     ON (C.STOPP_ID = S.STOPP_ID) 
     INNER JOIN MBR_JOURNEY J 
     ON (J.JOURNEY_ID = S.JOURNEY_ID) 
WHERE C.MARKET_CODE   = 'UK' 
AND C.COLLECT_TYPE_CODE  = 4 
AND J.JOURNEY_PLANNED_START >= DATE '2017-08-14'; 

:

  1. 사용하여 ANSI 조인 구문을 (오히려 기존보다 구문을 쉼표로 가입) 그것을 만들면서 테이블을 결합하는 방법을 훨씬 쉽게 볼 수 있으며 이전 (+) 구문의 오류를 방지 할 수 있습니다.
  2. '14-AUG-17'은 날짜 리터럴이 아니며 문자열 리터럴입니다. 날짜 열과 비교하는 경우 오라클은이를 날짜 리터럴로 암시 적으로 변환하려고 시도하지만 이것은 NLS_DATE_FORMAT 세션 변수를 형식 마스크로 사용하여 수행됩니다. 이 값은 사용자 세션 당 으로 설정되며 각 사용자는 자신의 설정을 변경할 수 있습니다. 기본 설정을 사용하고 사용자가이를 변경하면 쿼리를 변경하지 않고 쿼리가 중단되어 해당 사용자 (및 다른 사용자)가 디버깅하기가 어려워집니다. DATE '2017-08-14' 대신 ANSI 날짜 리터럴을 사용하거나 명시 적으로 형식 마스크를 지정하십시오 (언어 별 월 이름과 언어를 함께 사용하는 경우) TO_DATE('14-AUG-17', 'DD-MON-RR','NLS_LANGUAGE="ENGLISH"').