oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断

查询方式一:

  1. SELECT
  2. CASE WHEN (SELECT CAST(SUM(CASE
  3. WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN
  4. NVL(PRIME_CURRENCY_VALUE, 0)
  5. ELSE
  6. NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END) AS NUMBER(18,6)) AS ALLOCABLE_PRIME_CURRENCY_VALUE
  7. FROM RP_LEDGER_ITEM R
  8. WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
  9. AND SOURCE_TYPE = 'CASH') = 0 THEN 0 ELSE 1 END,
  10. (SELECT SUM(CASE
  11. WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN
  12. NVL(PRIME_CURRENCY_VALUE, 0)
  13. ELSE
  14. NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END) AS ALLOCABLE_PRIME_CURRENCY_VALUE
  15. FROM RP_LEDGER_ITEM R
  16. WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
  17. AND SOURCE_TYPE = 'CASH'),
  18. RP_LEDGER_ITEM.LEDGER_ITEM_ID
  19. FROM RP_CASH_MOVEMENT
  20. LEFT JOIN RP_LEDGER_ITEM
  21. ON RP_LEDGER_ITEM.CASH_MOVEMENT_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
  22. AND RP_LEDGER_ITEM.CASH_MOVEMENT_ID IS NOT NULL
  23. WHERE NVL(RP_CASH_MOVEMENT.IS_RESERVE_FUND, '') = ''
  24. AND 1 = 1
  25. AND RP_CASH_MOVEMENT.RP_ID = 'R'
  26. AND RP_CASH_MOVEMENT.INPUT_DATE >=
  27. TO_DATE('2014/2/1 0:00:00', 'YYYY-MM-DD HH24:MI:SS')
  28. AND (RP_CASH_MOVEMENT.OFFICE_ID = '0B4B12XOG33MO')

查询结果如下:

查询方式二:

  1. SELECT
  2. CASE WHEN (SELECT CAST(SUM(CASE
  3. WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN
  4. NVL(PRIME_CURRENCY_VALUE, 0)
  5. ELSE
  6. NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END) AS NUMBER(18,6)) AS ALLOCABLE_PRIME_CURRENCY_VALUE
  7. FROM RP_LEDGER_ITEM R
  8. WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
  9. AND SOURCE_TYPE = 'CASH') = 0 THEN 0 ELSE 1 END,
  10. (SELECT SUM(CASE
  11. WHEN (ALLOCABLE_PRIME_CURRENCY_VALUE IS NULL AND STATE_IND = 1) THEN
  12. NVL(PRIME_CURRENCY_VALUE, 0)
  13. ELSE
  14. NVL(ALLOCABLE_PRIME_CURRENCY_VALUE, 0) END) AS ALLOCABLE_PRIME_CURRENCY_VALUE
  15. FROM RP_LEDGER_ITEM R
  16. WHERE R.SOURCE_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
  17. AND SOURCE_TYPE = 'CASH'),
  18. '' LEDGER_ITEM_ID
  19. FROM RP_CASH_MOVEMENT
  20. LEFT JOIN RP_LEDGER_ITEM
  21. ON RP_LEDGER_ITEM.CASH_MOVEMENT_ID = RP_CASH_MOVEMENT.CASH_MOVEMENT_ID
  22. AND RP_LEDGER_ITEM.CASH_MOVEMENT_ID IS NOT NULL
  23. WHERE NVL(RP_CASH_MOVEMENT.IS_RESERVE_FUND, '') = ''
  24. AND 1 = 1
  25. AND RP_CASH_MOVEMENT.RP_ID = 'R'
  26. AND RP_CASH_MOVEMENT.INPUT_DATE >=
  27. TO_DATE('2014/2/1 0:00:00', 'YYYY-MM-DD HH24:MI:SS')
  28. AND (RP_CASH_MOVEMENT.OFFICE_ID = '0B4B12XOG33MO')

查询结果如图:

2条sql语句最大的区别在于

有些可能表达不清楚,

主要原因我也不知道,如果谁有兴趣可以回复我!

oracle使用LEFT JOIN关联产生的问题在查询结果中使用CASE WHEN 无法判断的更多相关文章

  1. Hibernate中用left join(左外连接)查询映射中没有关联关系的两个表记录问题

    一.问题背景 分账表split_summary结构如下: create table SPLIT_SUMMARY ( uuid VARCHAR2(32) not null, star_tdate VAR ...

  2. Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划

    V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划.此视图中的信息与 PLAN_TABLE 视图中的信息非常类似.但是,EXPLAIN PLAN 显示的是执行相应语句时 ...

  3. ORACLE的SQL JOIN方式小结

    在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结),官方的解释如下所示 A join is a query that combines row ...

  4. ORACLE的SQL JOIN方式大全

    ORACLE的SQL JOIN方式大全 在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结),官方的解释如下所示 A join is a que ...

  5. oracle update left join 写法

    oracle update left join 写法 (修改某列,条件字段在关联表中) 案例: E:考核表 X,:用户表 USERNAME 关联 需求:修改营业部最高分 分析:通过登录账号的营业部OR ...

  6. oracle使用+简写左关联出现的结果集不一致问题

    这是使用(+)的sql语句(已简写) select a.id,b.num from a,b where a.id=b.id(+) and b.num>10 这是使用left join的sql语句 ...

  7. JOIN关联表中ON,WHERE后面跟条件的区别

    select * from td  left join (select case_id as sup_case_id , count(*) supervise_number from  td_kcdc ...

  8. Oracle两张表关联批量更新其中一张表的数据

    Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...

  9. 深入理解mysql的自连接和join关联

    一.mysql自连接 mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名.我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息. 一般情况我们看到这张表 ...

随机推荐

  1. 最完整的合并相交集合的Java代码(查并集)

    这个是自己写的算法,如果有大牛,麻烦帮我并行化.初学者则可以学到不少东西. 产生测试用例 import java.io.*; import java.util.Random; public class ...

  2. new 与override 区别

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Newover ...

  3. java学习面向对象之异常之一

    一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...

  4. poj2954

    水题,先用叉积求三角形面积然后求三边上的点(由公约数上点)a然后用pick定理S=a+b/2-1就可以求出内部的点数了 var x,y,xx,yy,a1,a2,a3,x1,x2,x3,y1,y2,y3 ...

  5. 一起啃PRML - 1 Introduction 绪论

    一起啃PRML - 1 Introduction @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ 这一部分主要是介绍一下Pattern Recogni ...

  6. 深入浅出Node.js (附录D) - 搭建局域NPM仓库

    D.1 NPM仓库的安装 D.1.1 安装Erlang和CouchDB D.1.2 搭建NPM仓库 D.2 高阶应用 D.2.1 镜像仓库 D.2.2 私有模块应用 D.2.3 纯私有仓库 D.3 总 ...

  7. removeTask

    SystemUI中,Home键调出小刷子杀最近任务,整个流程从其RecentsPanelView.java开始: public void handleSwipe(View view) { ... // ...

  8. Linux学习笔记28——消息队列

    一 关于消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,而且,每个数据块都被认为含有一个类型,接收进程可以独立地接受含有不同类型值的数据块.可以通过发送消息来几乎完全避免命名管 ...

  9. How to disable Eclipse splash

    Run eclipse with the -nosplash option.

  10. expect远程登陆hw交换机--测试通过1

    #!/bin/bash #connect_the_hw_switch #by osx1260@.com swip=172.16.56.2 swport= swpasswd='yourswpasswd' ...