Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从另一个SQL中减去1个SQL_Sql_Oracle_Difference - Fatal编程技术网

从另一个SQL中减去1个SQL

从另一个SQL中减去1个SQL,sql,oracle,difference,Sql,Oracle,Difference,我想从两个不同的SQL中得到差异。 我见过类似的问题,但无法让他们验证。 神谕 这是我在下面帮助下的决心 select (TRUNC( "C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP" ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( "C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP" ) ), 'DAY' ) + INTERVAL '1' DAY + INTER

我想从两个不同的SQL中得到差异。 我见过类似的问题,但无法让他们验证。 神谕 这是我在下面帮助下的决心

select 
(TRUNC( "C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP" ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( "C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP" ) ), 'DAY' ) + INTERVAL '1' DAY + INTERVAL '1' MONTH - INTERVAL '1' DAY) "Month1",
sum(case when "C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD"='DSP_SUBMITTED' 
                and "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" IS NOT NULL
                THEN 1
                WHEN "C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD" ! ='DSP_SUBMITTED' 
                and "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" IS NOT NULL
                THEN -1
                 ELSE 0
           END)                "DCN"
 from 
"CJIMRPT"."V_EVENT_LOG_ENDTIME" "C__en_zw__V_EVENT_LOG_ENDDATE", 
"CJIMRPT"."V_REMAND" "C__en_zw__V_REMAND"
 where "C__en_zw__V_REMAND"."DCN"<>"C__en_zw__V_REMAND"."DOC_ID" and 
"C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD"in('DSP_SUBMITTED','CPIC_PUBLISHING', 'DSP_PUBLISHED', 'DSP_PURGED', 'DSP_ARCHIVED', 'DSP_REJECTED', 'DSP_IDENT_ONLY') and 
not "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" is null and 
"C__en_zw__V_REMAND"."REMAND_ID"="C__en_zw__V_EVENT_LOG_ENDDATE"."REMAND_ID" and 
"C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP">=CASE WHEN EXTRACT( DAY FROM (TRUNC( SYSDATE ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( SYSDATE ) ), 'DAY' ) + INTERVAL '1' DAY) - NUMTODSINTERVAL( EXTRACT( DAY FROM (TRUNC( SYSDATE ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( SYSDATE ) ), 'DAY' ) + INTERVAL '1' DAY) ), 'DAY' ) + INTERVAL '1' DAY + NUMTOYMINTERVAL( -4, 'MONTH' ) + INTERVAL '1' MONTH - INTERVAL '1' DAY ) < EXTRACT( DAY FROM (TRUNC( SYSDATE ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( SYSDATE ) ), 'DAY' ) + INTERVAL '1' DAY) ) THEN (TRUNC( SYSDATE ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( SYSDATE ) ), 'DAY' ) + INTERVAL '1' DAY) - NUMTODSINTERVAL( EXTRACT( DAY FROM (TRUNC( SYSDATE ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( SYSDATE ) ), 'DAY' ) + INTERVAL '1' DAY) ), 'DAY' ) + INTERVAL '1' DAY + NUMTOYMINTERVAL( -4, 'MONTH' ) + INTERVAL '1' MONTH - INTERVAL '1' DAY ELSE (TRUNC( SYSDATE ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( SYSDATE ) ), 'DAY' ) + INTERVAL '1' DAY) + NUMTOYMINTERVAL( -4, 'MONTH' ) END and 
"C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP"<(TRUNC( SYSDATE ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( SYSDATE ) ), 'DAY' ) + INTERVAL '1' DAY)
group by (TRUNC( "C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP" ) - NUMTODSINTERVAL( EXTRACT( DAY FROM TRUNC( "C__en_zw__V_EVENT_LOG_ENDDATE"."CREATE_TMSTMP" ) ), 'DAY' ) + INTERVAL '1' DAY + INTERVAL '1' MONTH - INTERVAL '1' DAY)
选择
(TRUNC(“C_uuen_uzw_uv_EVENT_LOG_ENDDATE”。“创建tmp”)-NUMTODSINTERVAL(摘录自TRUNC(“C_uen_uzw_uv_EVENT_LOG_ENDDATE”。“创建tmp”),“天”)+间隔“1”天+间隔“1”月-间隔“1”天“Month1”,
总和(当“C_uen_zw_uv_EVENT_LOG_ENDDATE.”“EVENT_CD”=“DSP_SUBMITTED”时的情况)
和“C_uen_zw_uv_EVENT_LOG_ENDDATE”。“DCN”不为空
那么1
当“C_uen_zw_uv_EVENT_LOG_ENDDATE”时,“EVENT_CD”!=“DSP_SUBMITTED”
和“C_uen_zw_uv_EVENT_LOG_ENDDATE”。“DCN”不为空
然后-1
其他0
完)“DCN”
从…起
“CJIMRPT”“V_事件日志_结束时间”“C_en_zw__V_事件日志_结束日期”,
“CJIMRPT”“V_还押”“C_en_zw___V_还押”
其中“C_uuen_uzw_uv_uRemand”、“DCN”、“C_uen_uzw_uv_uRemand”、“DOC_ID”和
“C_uen_zw_uv_事件日志_ENDDATE”。“事件CD”在('DSP_已提交'、'CPIC_发布'、'DSP_已发布'、'DSP_已清除'、'DSP_已存档'、'DSP_已拒绝'、'DSP_仅识别号')和
不是“C__en_zw__V_EVENT_LOG_ENDDATE”。“DCN”为空且
“C_uuen_uzw_uv_REMAND”。“REMAND_ID”=“C_uen_uzw_uv_事件日志结束日期”。“REMAND_ID”和
“C_uuen_uzw_uv_EVENT_LOG_ENDDATE”。“CREATE_utmp”>=提取时的大小写(从(TRUNC(SYSDATE)开始的天)–NUMTODSINTERVAL(从TRUNC(SYSDATE))提取(从TRUNC(SYSDATE)开始的天)–NUMTODSINTERVAL(从TRUNC(SYSDATE)开始的天);“天”+间隔“1”天);“天”)+间隔“1”天+NUMTOYMINTERVAL(-4,“月”)+间隔“1”月-间隔“1”天
甲骨文的例子

SELECT product_id FROM inventories
MINUS
SELECT product_id FROM order_items;

我认为您的问题与
减号
运算符无关,但如果我理解正确,您希望从两个查询中得到记录计数的减法结果。可以简单地描述如下-

select (select count(*) from dual) - (select count(*) from dual)
 from dual;
您需要用自己的
count(*)
查询替换dual
中的
select count(*)

注意,如果您首先应用
减号
运算符,如@kevinsky在其回答中所说,然后进行
计数(*)
您的结果可能不理想或不符合预期(如下例所示)-


由于两个查询之间的唯一区别似乎是所考虑的事件光盘,因此您可以将其简化为一个查询,该查询将获取您已识别的所有事件光盘,然后对“DSP\u SUBMITTED”行(顶部查询)求和1,对其他事件光盘(底部查询)求和-1

我使用一个案例来检查事件\u CD,以确定这是一个递增计数还是递减计数,并检查“C_uen_zw_uv_EVENT_LOG_ENDDATE”。“DCN”不是NULL,因为给定的计数逻辑(DCN)不计算NULL值,所以我需要复制该行为

select sum(case when "C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD"='DSP_SUBMITTED' 
                and "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" IS NOT NULL
                THEN 1
                WHEN "C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD" ! ='DSP_SUBMITTED' 
                and "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" IS NOT NULL
                THEN -1
                 ELSE 0
           END)                "DCN"
 from 
"CJIMRPT"."V_EVENT_LOG_ENDTIME" "C__en_zw__V_EVENT_LOG_ENDDATE", 
"CJIMRPT"."V_REMAND" "C__en_zw__V_REMAND"
 where "C__en_zw__V_REMAND"."DCN"<>"C__en_zw__V_REMAND"."DOC_ID" and 
"C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD"in('DSP_SUBMITTED','CPIC_PUBLISHING', 'DSP_PUBLISHED', 'DSP_PURGED', 'DSP_ARCHIVED', 'DSP_REJECTED', 'DSP_IDENT_ONLY') and 
not "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" is null and 
"C__en_zw__V_REMAND"."REMAND_ID"="C__en_zw__V_EVENT_LOG_ENDDATE"."REMAND_ID"
选择sum(当“C_uen_zw_uv_EVENT_LOG_ENDDATE”时的情况),“EVENT_CD”='DSP_SUBMITTED'
和“C_uen_zw_uv_EVENT_LOG_ENDDATE”。“DCN”不为空
那么1
当“C_uen_zw_uv_EVENT_LOG_ENDDATE”时,“EVENT_CD”!=“DSP_SUBMITTED”
和“C_uen_zw_uv_EVENT_LOG_ENDDATE”。“DCN”不为空
然后-1
其他0
完)“DCN”
从…起
“CJIMRPT”“V_事件日志_结束时间”“C_en_zw__V_事件日志_结束日期”,
“CJIMRPT”“V_还押”“C_en_zw___V_还押”
其中“C_uuen_uzw_uv_uRemand”、“DCN”、“C_uen_uzw_uv_uRemand”、“DOC_ID”和
“C_uen_zw_uv_事件日志_ENDDATE”。“事件CD”在('DSP_已提交'、'CPIC_发布'、'DSP_已发布'、'DSP_已清除'、'DSP_已存档'、'DSP_已拒绝'、'DSP_仅识别号')和
不是“C__en_zw__V_EVENT_LOG_ENDDATE”。“DCN”为空且
“C_uuen_uzw_uv_REMAND”。“REMAND_ID”=“C_uen_uzw_uv_事件日志结束日期”。“REMAND_ID”

唯一的区别是where子句什么没有验证?你得到了什么错误?谢谢大家,我明天会尝试。下面的SQL做了我想要的,感谢大家的输入。不幸的是,SQL太长了,无法输入,除非有人有更好的方法。新的网站。这个减号函数可以工作。但是,为了简化SQL的输入示例我删除了每月明细表。不幸的是,当在减号函数中重新添加月份时,该函数不起作用。我将尝试上面的嵌套选择。
select sum(case when "C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD"='DSP_SUBMITTED' 
                and "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" IS NOT NULL
                THEN 1
                WHEN "C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD" ! ='DSP_SUBMITTED' 
                and "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" IS NOT NULL
                THEN -1
                 ELSE 0
           END)                "DCN"
 from 
"CJIMRPT"."V_EVENT_LOG_ENDTIME" "C__en_zw__V_EVENT_LOG_ENDDATE", 
"CJIMRPT"."V_REMAND" "C__en_zw__V_REMAND"
 where "C__en_zw__V_REMAND"."DCN"<>"C__en_zw__V_REMAND"."DOC_ID" and 
"C__en_zw__V_EVENT_LOG_ENDDATE"."EVENT_CD"in('DSP_SUBMITTED','CPIC_PUBLISHING', 'DSP_PUBLISHED', 'DSP_PURGED', 'DSP_ARCHIVED', 'DSP_REJECTED', 'DSP_IDENT_ONLY') and 
not "C__en_zw__V_EVENT_LOG_ENDDATE"."DCN" is null and 
"C__en_zw__V_REMAND"."REMAND_ID"="C__en_zw__V_EVENT_LOG_ENDDATE"."REMAND_ID"