Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
在sqlplus中比较并显示同一表中的值_Sql_Oracle - Fatal编程技术网

在sqlplus中比较并显示同一表中的值

在sqlplus中比较并显示同一表中的值,sql,oracle,Sql,Oracle,我对sqlplus非常陌生,对该主题的了解非常有限,有人能在以下方面帮助我吗: 我有一个包含以下列的表:code、value和date 代码列中有两种类型的值,例如:ABC.1和DEF.1。在这里,DEF.1具有所有日期的值,但ABC.1的情况并非如此,它缺少某些日期的值。如果DEF.1中有一个特定日期的值,而ABC.1中没有相同日期的值,我将尝试编写一个查询来提取数据 例: 这里ABC.1没有日期为2019年11月22日的值,因此对于该日期,我想提取DEF.1的值,最简单、可能最快的是分析计数

我对sqlplus非常陌生,对该主题的了解非常有限,有人能在以下方面帮助我吗:

我有一个包含以下列的表:code、value和date

代码列中有两种类型的值,例如:ABC.1和DEF.1。在这里,DEF.1具有所有日期的值,但ABC.1的情况并非如此,它缺少某些日期的值。如果DEF.1中有一个特定日期的值,而ABC.1中没有相同日期的值,我将尝试编写一个查询来提取数据

例:


这里ABC.1没有日期为2019年11月22日的值,因此对于该日期,我想提取DEF.1的值,最简单、可能最快的是分析计数:


您也可以使用not exists、not in和grouping,但若您需要详细信息,分析方法是最短的。此查询显示计数不同的所有行,因此如果有3个ABC和5个DEF,则该日期将有8行。如果缺少行,它也可以工作,如您的示例中所示。日期是保留字,因此我添加了下划线。

我将使用“不存在”来处理此问题:


有了日期、代码的索引,我希望这会有很好的性能。

你的意思是说你想要像ABC.1、44、22-11-2019这样的一行吗?不,只需要显示DEF.1、44、22-11-2019的值。从2017年到2019年,我需要将值导出到csv文件中,以记录DEF.1和ABC.1的值。是否每天都有一行,或者同一天有两行DEF.1?有没有可能ABC.1只存在一个日期,而DEF.1却丢失了?示例:DEF.1、44、22-11-2019 DEF.1、90、22-11-2019是相同日期有多个值,代码DEF.1不缺少任何日期的任何值。
+------------------------------+
| Code    Value     Date       |
+------------------------------+
| DEF.1    44       22-11-2019 |
+------------------------------+
| ABC.1    23       23-11-2019 |
+------------------------------+
| DEF.1    12       23-11-2019 |
+------------------------------+
| ABC.1    99       24-11-2019 |
+------------------------------+
| DEF.1    23       24-11-2019 |
+------------------------------+
select code, value, date_
  from (
    select code, value, date_, 
           count(case code when 'ABC.1' then 1 end) over (partition by date_) c1,
           count(case code when 'DEF.1' then 1 end) over (partition by date_) c2
      from tbl t)
  where c1 <> c2
select t.*
from t
where t.code = 'DEF.1' and
      not exists (select 1
                  from t t2
                  where t2.date = t.date and t2.code = 'ABC.1'
                 );