Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 检索行ID,其中该ID共享的属性对于所有对应的行为空_Sql_Oracle - Fatal编程技术网

Sql 检索行ID,其中该ID共享的属性对于所有对应的行为空

Sql 检索行ID,其中该ID共享的属性对于所有对应的行为空,sql,oracle,Sql,Oracle,我有一个正在使用的项目表,它有两列:orderId和date 如果订单的任何项目的日期不为空,则该订单应被视为“已发货”。否则,它将被视为“正在处理” 我需要一个查询来获取所有“已发货”或所有“正在处理”的订单 发货很容易: 我可以轻松获得“已发货”订单: SELECT DISTINCT orderId FROM Orders WHERE date IS NOT NULL 对于相同的orderId,只要其中一行的date不为NULL,那么date是否为NULL并不重要 为了得到“处理”,到目

我有一个正在使用的项目表,它有两列:
orderId
date

如果订单的任何项目的
日期不为空
,则该订单应被视为“已发货”。否则,它将被视为“正在处理”

我需要一个查询来获取所有“已发货”或所有“正在处理”的订单

发货很容易:

我可以轻松获得“已发货”订单:

SELECT DISTINCT orderId FROM Orders WHERE date IS NOT NULL
对于相同的
orderId
,只要其中一行的
date不为NULL,那么
date是否为NULL并不重要


为了得到“处理”,到目前为止我已经

SELECT orderId FROM Orders GROUP BY orderId HAVING COALESCE(date, NULL) IS NULL
但这会散发出

ORA-00979:不是表达式的组


我有没有办法构造一个查询,返回所有的
orderId
,其中所有对应的
date
s都是
NULL

有两种方法可以做到这一点。这里有一个使用
的选项不存在

select distinct orderId
from Orders o
where not exists  (
  select 1
  from Orders o2 
  where o.orderId = o2.orderId
    and o2.dt is not null)

下面是另一个条件聚合:

select orderId
from Orders o
group by orderId
having sum(case when dt is not null then 1 else 0 end) = 0

您可以在
HAVING
子句中使用
MAX
函数,如下所示:

SELECT orderId FROM Orders GROUP BY orderId HAVING max("DATE") is null

如果订单的最大日期为空,则其所有日期实际上都为空。

这似乎会导致聚合函数中出现空列的警告。
Ok,然后您可以将最大(日期)为空替换为,例如,max(nvl(日期,'01/01/1970'))='01/01/1970'。它将保证max函数中没有空值。您可以将1970年1月1日替换为表中比以往更小的日期