Sql Oracle中的嵌套Case语句

Sql Oracle中的嵌套Case语句,sql,oracle,case,Sql,Oracle,Case,因此,我试图运行一条SQL语句来选择整个数据库,以便在ETL过程中上载,但我想创建一个计算列,计算从票据打开到关闭的天数 IF-THEN逻辑如下所示: 如果部门正在维护,并且外键与第二个表匹配,并且有特定的任务类型,则使用公式a 其他的 如果事件解决日期为空,则使用公式B 否则使用公式C 我认为我的案例逻辑是可靠的,但它总是让我一次又一次地回到同一行。这告诉我我错过了什么。我几乎可以肯定这和案件陈述第一部分的WHEN陈述有关,但如果我知道,我就不会问了 SELECT a.* ,

因此,我试图运行一条SQL语句来选择整个数据库,以便在ETL过程中上载,但我想创建一个计算列,计算从票据打开到关闭的天数

IF-THEN逻辑如下所示: 如果部门正在维护,并且外键与第二个表匹配,并且有特定的任务类型,则使用公式a 其他的 如果事件解决日期为空,则使用公式B 否则使用公式C

我认为我的案例逻辑是可靠的,但它总是让我一次又一次地回到同一行。这告诉我我错过了什么。我几乎可以肯定这和案件陈述第一部分的WHEN陈述有关,但如果我知道,我就不会问了

SELECT 
    a.*
    , a.REPORTED_DATE
    , a.CLOSE_DATE
    , a.INCIDENT_RESOLVED_DATE
    , CASE 
        WHEN DEPARTMENT = 'Grounds Maintenance' 
        AND a.INCIDENT_ID = b.SOURCE_OBJECT_ID
        AND b.TASK_TYPE_ID = '11501'
        THEN (to_date(b.ACTUAL_END_DATE, 'DD-MM-YYYY') - to_date(a.REPORTED_DATE, 'DD-MM-YYYY'))
        ELSE CASE 
            WHEN a.INCIDENT_RESOLVED_DATE IS NULL THEN (to_date(a.CLOSE_DATE, 'DD-MM-YYYY') - to_date(a.REPORTED_DATE, 'DD-MM-YYYY')) 
            ELSE (to_date(a.INCIDENT_RESOLVED_DATE, 'DD-MM-YYYY') - to_date(a.REPORTED_DATE, 'DD-MM-YYYY'))END 
    END 
AS 
    DAYS_TO_RESOLVE
FROM 
    CMEM_CS_SERVICE_REQUESTS a, jtf_tasks_b b
WHERE 
    EXTRACT(YEAR FROM a.REPORTED_DATE) > 2009;

想法?

首先,您的查询中有交叉连接。这是有意的还是可能的错误?我相信这就是问题所在。我在哪里创建笛卡尔函数?您在Where子句中从两个用逗号分隔的表中进行选择,并且没有连接条件。这就是为什么您应该始终使用显式的
JOIN
基于关键字的JOIN.Blargh。我希望它比那个更复杂。若你们需要进一步的帮助,添加一些样本数据和预期结果,并解释逻辑。。