Oracle11g 查询以检查任何具有空值的列

Oracle11g 查询以检查任何具有空值的列,oracle11g,Oracle11g,如果查询中ptr\u实际值\u dt有一些值,如何将ptr\u预测值\u dt显示为空,否则显示ptr\u预测值\u dt 请建议如何在Oracle中编写查询 SELECT MAX (a.ptr_planned_dt) AS ptr_planned_dt, MAX (a.ptr_forecast_dt) AS ptr_forecast_dt, MAX (a.ptr_actual_dt) AS ptr_actual_dt FROM ptr_details a

如果查询中
ptr\u实际值\u dt
有一些值,如何将
ptr\u预测值\u dt
显示为空,否则显示
ptr\u预测值\u dt

请建议如何在Oracle中编写查询

SELECT MAX (a.ptr_planned_dt)  AS ptr_planned_dt,
       MAX (a.ptr_forecast_dt) AS ptr_forecast_dt,
       MAX (a.ptr_actual_dt)   AS ptr_actual_dt
  FROM ptr_details a
您可以使用NVL2-NVL2(值,如果不为空则返回值,如果为空则返回值)

或nvl和解码或case的组合

e、 g


你说你有两个问题,但对我来说似乎是一样的。如果这是一个Oracle问题,为什么你要使用标签“mysql”?意思是如果ptr_forecast_dt为空,那么应该打印ptr_actual_dt,否则使用
decode()打印ptr_forecast_dt
function或searched
case
expression。您能告诉我如何在上述查询中使用case吗?如何在上述查询中使用case?我倾向于建议使用
COALESCE
over
NVL
NVL2
。它有几个优点:它是ANSI标准;它接受n个参数,因此它比以前的任何一个函数都有更多的功能;而且它支持短路评估,所以在第一个非空值之后的任何计算都被跳过。我同意这一点-我只是建议使用nvl2,因为我最初误读了这个问题,但它提供了nvl和解码的良好组合。在ANSI sql的情况下,使用COALESCE
select MAX (a.ptr_planned_dt)  AS ptr_planned_dt,
       nvl2(max(a.ptr_actual_dt),max(a.ptr_forecast),null) as ptr_forecast_dt,
       MAX (a.ptr_actual_dt)   AS ptr_actual_dt
from ptr_details a