在where子句中嵌套Case/If Else语句



我正在尝试为我在case语句中进行的计算提供替代方案。目前,它正在查看'close_date'以满足该方程。我希望它能够首先查看'close_date',但如果它为null,则使用SYSDATE。

我的代码如下:
    SELECT CASE
               WHEN fourthlevel.case_type IN
                       ('Complaint')
               THEN
                  (SELECT COUNT (*)
                     FROM work_days1
                    WHERE     work_days1.business_date >
                                 fourthlevel.correspond_date
                          AND work_days1.business_date <=
                                 fourthlevel.close_date)
               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 <=
                                 fourthlevel.close_date)
            END
               AS sla_days
      FROM fourthlevel

那么我是在where子句中使用嵌套的if-else语句,还是使用另一个case语句?

可以使用Coalesce

http://msdn.microsoft.com/en-us/library/ms190349.aspx

Coalesce检查第一个参数;如果为空,则使用第二个参数,否则使用第一个参数。

COALESCE(fourthlevel.close_date, SYSDATE)

如果close_date为null,则检查fourthlevel.close_date,然后使用SYSDATE

最新更新