【问题标题】:NVL WITH DISTINCT IN PL/SQL [closed]NVL WITH DISTINCT 在 PL/SQL [关闭]
【发布时间】:2015-05-29 05:46:24
【问题描述】:

为什么 NVL 函数不能在 pl/sql 中使用 distinct?

例如:

select DISTINCT (NVL(b.state_id,'0')) 
From branch_detail b 
where b.state_name like ('TAMILNADU%')

这是表结构(

branch_detail
=====================

state_id   state_name
--------   ---------
  1          kerala
  1          kerala
  2          karnataka
  2          karnataka

预期输出:0

【问题讨论】:

  • 您需要解释为什么 NVL() 没有按您预期的方式工作。请提供一些测试数据以及所需的实际输出,否则您的问题将被关闭,您将无法得到答案。
  • 您还期待什么?....经验是每个人给自己的错误起的名字

标签: oracle plsql


【解决方案1】:

NVL() 函数替换结果集中的 NULL。必须有返回的行才能工作。

"如果没有返回行怎么处理"

您需要生成一行。这可能有点作弊,但它会做你想做的事:

SQL> Select distinct (nvl(b.state_id,'0')) 
  2  from ( select 'tamilnadu' as state_name from dual ) t
  3       left outer join branch_detail b 
  4      on b.state_name = t.state_name
  5  /

(NVL(B.STATE_ID,'0'))
---------------------
                    0

SQL> select distinct (nvl(b.state_id,'0')) 
  2  from ( select 'kerala' as state_name from dual ) t
  3         left outer join branch_detail b 
  4      on b.state_name = t.state_name
  5  /

(NVL(B.STATE_ID,'0'))
---------------------
                    1

SQL> 

内联视图t 为搜索的值伪造一行;左外连接意味着你会得到一行,因为branch_detail 表中没有匹配项。

【讨论】:

  • 非常感谢..会解决这个问题
【解决方案2】:

仅当 state_id 的值为空时,NVL 函数才会返回值 0。在您的情况下,我认为上述查询没有返回任何行。因此不显示结果。我认为只有当查询返回的值为空时它才会起作用。

【讨论】:

  • 如果没有返回行怎么处理?...谢谢您的回复
  • 我认为你需要编写代码来处理这个问题。如果 'sql%rowcount =0' 然后设置你需要的值,否则显示返回的值
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 2016-01-14
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 2014-11-07
相关资源
最近更新 更多