Sql 具有不同数据类型的Case语句

Sql 具有不同数据类型的Case语句,sql,oracle,case,Sql,Oracle,Case,我尝试返回SLA天,以满足特定条件。但是,对于特定条件,我希望它返回不同的数据类型。目前的代码如下: SELECT CASE WHEN fourthlevel.case_type IN ('Complaint') THEN (SELECT COUNT (*) FROM work_days1

我尝试返回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='Cancelled'返回'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
如何执行此操作?

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。

谢谢!然而,它对我来说仍然不起作用,尽管代码为null和varchar解决方案生成的结果都很好,但sla日期仍然与以前一样。我想知道这是否是因为调查案例类型投诉的案例陈述覆盖了案例状态为取消的案例。case语句的执行顺序是什么?或者这一切都是同时发生的?case语句执行的顺序是什么?是的,从上到下仔细排序,你还想为你的输入人员使用ELSEThanks。我把case_状态条件放在最上面,从而重新排列了case语句的顺序。伙计,如果没有我,我会迷路的!