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