2014-07-16 2 views
2

특정 조건의 SLA 요일을 반환하려고합니다. 그러나 특정 조건에 대해 다른 데이터 형식을 반환해야합니다. 다음과 같이 현재 코드는 다음과 같습니다다른 데이터 형식의 사례 명세서

 SELECT CASE 
       WHEN fourthlevel.case_type IN 
         ('Complaint') 
       THEN 
        (SELECT COUNT (*) 
        FROM work_days1 
        WHERE  work_days1.business_date > 
           fourthlevel.cdate 
          AND work_days1.business_date <= 
           COALESCE (fourthlevel.close_date, 
              SYSDATE)) 
       WHEN fourthlevel.case_type IN ('Enquiry') 
       THEN 
        (SELECT COUNT (*) 
        FROM work_days1 
        WHERE  work_days1.business_date > 
           fourthlevel.create_date 
          AND work_days1.business_date <= 
           COALESCE (fourthlevel.close_date, 
              SYSDATE)) 
      END 
       AS sla_days 
     FROM fourthlevel 

내가 어디 case_status = '취소'반환 'N/A'에 대한 보답하고 싶다. 나는 이것을 할 수 없다는 것을 알고 있지만 이해하기 쉽도록 코드를 포함 할 것이다.

SELECT CASE 
     WHEN fourthlevel.case_type IN ('Complaint') 
     THEN 
     (SELECT COUNT (*) 
      FROM work_days1 
      WHERE  work_days1.business_date > fourthlevel.cdate 
       AND work_days1.business_date <= 
         COALESCE (fourthlevel.close_date, SYSDATE)) 
     WHEN fourthlevel.case_type IN ('Enquiry') 
     THEN 
     (SELECT COUNT (*) 
      FROM work_days1 
      WHERE  work_days1.business_date > fourthlevel.create_date 
       AND work_days1.business_date <= 
         COALESCE (fourthlevel.close_date, SYSDATE)) 
     WHEN fourthlevel.case_status = 'Cancelled' 
     THEN 
     'N/A' 
    END 
     AS sla_days 
    FROM fourthlevel 

어떻게해야합니까?

답변

5

case 문은 하나의 데이터 형식 만 반환 할 수 있습니다. 그래서 문자열로 숫자를 변환 : 두 개의 조건이 일치하지 않는 경우에

SELECT CASE 
    WHEN fourthlevel.case_type IN ('Complaint') 
    THEN 
    (SELECT cast(COUNT(*) as varchar2(255)) 
     FROM work_days1 
     WHERE  work_days1.business_date > fourthlevel.cdate 
      AND work_days1.business_date <= 
        COALESCE (fourthlevel.close_date, SYSDATE)) 
    WHEN fourthlevel.case_type IN ('Enquiry') 
    THEN 
    (SELECT cast(COUNT(*) as varchar2(255)) 
     FROM work_days1 
     WHERE  work_days1.business_date > fourthlevel.create_date 
      AND work_days1.business_date <= 
        COALESCE (fourthlevel.close_date, SYSDATE)) 
    WHEN fourthlevel.case_status = 'Cancelled' 
    THEN 
    'N/A' 
END AS sla_days 
FROM fourthlevel 

다른 방법으로, NULL를 반환 할 수 있습니다.

+0

고든 고마워! 그러나 코드가 null 및 varchar 솔루션 모두에 대해 정상적으로 생성되지만 sla 일은 이전과 동일하게 유지됩니다. case_type (Complaint, Inquiry)을보고있는 case 문이 case_status가 Canceled 인 경우를 덮어 쓰고 있다는 사실과 궁금해합니다. case 문을 실행하는 순서가 있습니까? 아니면 모두 simular입니까? – Heisenberg

+0

거기에 case 문을 실행하는 순서가 있습니까? "위로"에서 "아래로"예 그래서 조심스럽게 순서, ELSE –

+0

입력 해 주셔서 감사합니다. 나는 case_status 조건을 맨 위에 놓음으로써 나의 case 문을 재정렬했다. 내가 stackoverflow없이 잃게 될 것입니다! – Heisenberg