Sql 未找到行时如何显示0

Sql 未找到行时如何显示0,sql,oracle,Sql,Oracle,我有一个SQL查询,其中我将sysdate传递给查询,问题是当表中没有与sysdate匹配的日期时,即使应用了nvl,它也不会显示零 这是我的问题 select * from molasses where trunc(trn_dte) = trunc(sysdate) 但它只在表中存在当前日期时显示数据,但如果表中找不到数据,我希望显示零。请帮助我在oracle 10 g中执行此操作。因为有时情况与上述情况类似,当没有找到数据时,我必须显示零。类似的方法会起作用,但我认为这不是一个好主意: s

我有一个SQL查询,其中我将sysdate传递给查询,问题是当表中没有与sysdate匹配的日期时,即使应用了nvl,它也不会显示零 这是我的问题

select * from molasses
where trunc(trn_dte) = trunc(sysdate)
但它只在表中存在当前日期时显示数据,但如果表中找不到数据,我希望显示零。请帮助我在oracle 10 g中执行此操作。因为有时情况与上述情况类似,当没有找到数据时,我必须显示零。类似的方法会起作用,但我认为这不是一个好主意:

select nvl(t.a, n.a) as a, nvl(t.b, n.b) as b, ...
from molasses t
right outer join (select 0 as a, 0 as b, ... from dual) n on 1 = 1
像这样的方法会奏效,但我认为这不是一个好主意:

select nvl(t.a, n.a) as a, nvl(t.b, n.b) as b, ...
from molasses t
right outer join (select 0 as a, 0 as b, ... from dual) n on 1 = 1

这很奇怪,我不会用它,它更像是一个黑客:

SELECT col1, col2, ..., colN              --- numeric columns
FROM molasses
WHERE trunc(trn_dte) = trunc(sysdate)

UNION ALL

SELECT 0, 0, ..., 0
FROM dual
WHERE NOT EXISTS
      ( SELECT *
        FROM molasses
         WHERE trunc(trn_dte) = trunc(sysdate)
      ) ;
我们只想知道当表中只有一行且所有值都为零时,应用程序/用户会理解什么


我认为这也会起作用:

SELECT m.col1, m.col2, ..., m.colN              --- numeric columns
FROM dual LEFT JOIN molasses m
  ON trunc(m.trn_dte) = trunc(sysdate) ;

并显示空值,而不是(所需的)0。使用
COALESCE()
函数也可以很容易地解决这个问题。

这很奇怪,我不会使用它,它更像是一种黑客行为:

SELECT col1, col2, ..., colN              --- numeric columns
FROM molasses
WHERE trunc(trn_dte) = trunc(sysdate)

UNION ALL

SELECT 0, 0, ..., 0
FROM dual
WHERE NOT EXISTS
      ( SELECT *
        FROM molasses
         WHERE trunc(trn_dte) = trunc(sysdate)
      ) ;
我们只想知道当表中只有一行且所有值都为零时,应用程序/用户会理解什么


我认为这也会起作用:

SELECT m.col1, m.col2, ..., m.colN              --- numeric columns
FROM dual LEFT JOIN molasses m
  ON trunc(m.trn_dte) = trunc(sysdate) ;

并显示空值,而不是(所需的)0。使用
COALESCE()
函数也可以很容易地解决这个问题。

假设您的表有四个数字列,您可以编写:

select * from molasses
where trunc(trn_dte) = trunc(sysdate)
union all
select 0, 0, 0, 0 from dual
where ( select count(*) from molasses where trunc(trn_dte) = trunc(sysdate) ) = 0

假设您的表有四个数字列,您可以编写:

select * from molasses
where trunc(trn_dte) = trunc(sysdate)
union all
select 0, 0, 0, 0 from dual
where ( select count(*) from molasses where trunc(trn_dte) = trunc(sysdate) ) = 0


这是一个非常不寻常的问题。当不存在数据时,为什么查询应返回0?通常,当不存在数据时,由客户端软件/报表生成器来显示有意义的内容,而不是查询本身。

这是一个非常不寻常的问题。当不存在数据时,为什么查询应返回0?通常,当不存在数据时,由客户端软件/报表生成器来显示有意义的内容,而不是查询本身。

是否在所有列中显示
0
?某些列将具有其他(数字除外)数据类型。您不能在应用程序中检查是否返回了0行吗?如果在表中未找到sysdate和
trn\u date
列的数据,我想显示0?这也是数字吗?不,这是日期类型,当我在所有列中获得所需的解决方案时,我将只选择数字列
0
?某些列将具有其他(数字除外)数据类型。您不能在应用程序中检查是否返回了0行吗?如果在表中未找到sysdate和
trn\u date
列的数据,我想显示0?这也是数字吗?不,这是日期类型,当我得到解决方案时,我将只选择数字列查看上述答案Please@user1685991-你有很多经验丰富的开发人员告诉你这是一个坏主意-这不是一件不可能的事情,但仍然是一个坏主意。警告程序MOR…例如,如果我正在查找月报,则任何日期的缺失都会使我感到困惑,因此我希望显示所有日期,如果当天没有任何行,则零对我来说是可以的,而不是月报中的某一天。查看上述答案Please@user1685991-多个经验丰富的开发人员告诉您这是个坏主意-这不是一件不可能的事,但却是一个坏主意。警告程序MOR…例如,如果我正在查找月报,那么任何日期的缺失都会让我感到困惑,因此我想显示所有日期,如果那天没有任何行,那么零对我来说是可以的,而不是月报中的某一天。为什么不可以?SQL有足够的能力让我们选择将未找到案例的处理放在应用程序端或SQL端(可能在存储过程中)。这取决于我们的用例(也许这个特定的用例不好)。为什么不呢?SQL有足够的能力让我们选择将未找到案例的处理放在应用程序端或SQL端(可能在存储过程中)。这取决于我们的用例(可能这个特定的用例并不好)。