一个用户下广告位  某一天有收入和支出  有支出不一定有收入  有收入不一定有支出  下例为按用户查询 sanhao 下的信息

支出如下:

收入如下:

按天进行查询,例如查询:

得到结果如下:

使用一般的按日期左关联,会出现错误。

正确的使用如下,把每个表的收入或者支出补全 为0,然后union合并 再进行分组合并

select rownum rn,mm0.accesstime,nvl(mm1.inall,0) inall
                               ,nvl(mm1.outall,0) outall,mm1.placeid
                               ,decode(mm1.inall,null,0,mm1.inall)-decode(mm1.outall,null,0,mm1.outall) profit
                               ,decode(inall,0,'-', to_char(round((decode(mm1.inall,null,0,mm1.inall)-decode(mm1.outall,null,0,mm1.outall) )/inall,4)*100)||'%') proRate
                              
                               from
                        (
                            select column_value as accesstime from table(fn_split('2013-10-12,2013-10-13,2013-10-14',',') )
                        ) mm0,
                        (                        
                            select accesstime,placeid,sum(inall) inall,sum(outall2) outall  from
                            (     
                                  --包广告位付款
                                  select 0 inall,to_char(rd.accounttime,'yyyy-mm-dd') as accesstime,rd.placeid ,decode(sum(rd.paysum),null,0,sum(rd.paysum)) outall2
                                  from ad_paidrecord rd
                                  inner join ad_place pl on rd.placeid=pl.placeid and pl.ismonthly=1
                                  where rd.placeid!=0--包广告位
                                        and pl.ismonthly=1
                                        and rd.rectype in(0,2)
                                        and rd.accounttime>= to_date('2013-10-12','yyyy-mm-dd')
                                        and rd.accounttime<= to_date('2013-10-14','yyyy-mm-dd')--根据记账日期(小的日期)
                                        --and (i_placeid=-1 or rd.placeid=i_placeid)
                                        and (rd.webuserid='sanhao' )
                                  group by rd.accounttime,rd.placeid
                                  union
                                  --总收入                              
                                  select sum(v.income)inall,to_char(v.accesstime,'yyyy-mm-dd') as accesstime,v.placeid,0
                                  from v_placeincome v
                                  where v.accesstime >= to_date('2013-10-12','yyyy-mm-dd')
                                        and v.accesstime <=  to_date('2013-10-14','yyyy-mm-dd')
                                      --  and (i_placeid=-1 or v.placeid=i_placeid)
                                        and v.ismonthly=1
                                        and (v.webuserid='sanhao')
                                  group by accesstime,placeid
                                )
                                group by accesstime,placeid
                         )  mm1                      
                       where  mm0.accesstime=mm1.accesstime(+)
                          and (inall>0 or (nvl(mm1.outall,0))>0)
                          order by placeid,mm0.accesstime asc;

经典union的使用的更多相关文章

  1. SQL FOR JSON PATH 返回 json

    --直接返回 age FOR JSON PATH --返回值 [{"name":"张学友","age":60}] select c1, c2 ...

  2. [转]从两道经典试题谈C/C++中联合体(union)的使用

    宋宝华 21cnbao sweek@21cn.com 试题一:编写一段程序判断系统中的CPU是Little endian还是Big endian模式? 分析: 作为一个计算机相关专业的人,我们应该在计 ...

  3. [Swift]经典解题思路:联合查找Union Find

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. 经典SQL语句大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  5. 【转载】经典SQL语句大全

    [原文地址]http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html 一.基础 1.说明:创建数据库CREATE DATABAS ...

  6. 让UNION与ORDER BY并存于SQL语句当中

    在SQL语句中,UNION关键字多用来将并列的多组查询结果(表)合并成一个结果(表),简单实例如下: SELECT [Id],[Name],[Comment] FROM [Product1] UNIO ...

  7. HDU 5652 India and China Origins(经典并查集)

    特别经典的一个题,还有一种方法就是二分+bfs 题意:空间内n*m个点,每个点是0或者1,0代表此点可以走,1代表不能走.接着经过q年,每年一个坐标表示此点不能走.问哪年开始图上不能出现最上边不能到达 ...

  8. POJ 1182 食物链 (经典带权并查集)

    第三次复习了,最经典的并查集 题意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们 ...

  9. 20160411002 经典SQL语句大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

随机推荐

  1. Kettle 连接失败 Oracle 数据库报 ora-12505 的解决方法(转)

    用kettle新建DB连接的时候总是报错,可是用plsql连接是可以连上,错误信息大致如下: 错误连接数据库 [MIS] : org.pentaho.di.core.exception.KettleD ...

  2. 使用 NuGet 管理项目库

    使用 NuGet 管理项目库 Phil Haack 本文转载自:http://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 无论多么努力,Micros ...

  3. 框架计划随笔 三.EntityFramework在传统事务脚本模式下的使用

    某个朋友问为什么不推首页或者允许评论,我说一直没怎么写博客,也习惯了先随便乱画再开始写文档,担心公开后一些不经意的"呓语“中得出的错误的结论会给别人错误的观点,所以这个系列只是当做熟悉写博客 ...

  4. JavaSE思维导图(四)

  5. asp.net验证码及怎么获取里面的数值(整合)

    一.ASP.Net的验证码的作用 对于一个预防攻击的web表单来讲,验证码通常是一个常见的措施.因为如果对于一些public区域的页面内容来讲,譬如一个登录表单,如果没有必要的安全措施,很可能遭到模拟 ...

  6. SQL XML process

    declare @data xml set @data=' <bookstore> <book category="COOKING"> <title ...

  7. java项目打jar包

    首先 在工程中,右键项目,有个export,选择JAR File,就能导出jar包. 一.java项目没有导入第三方jar包 1. 首先在Eclipse中打开项目, 右键点击项目,选择“Export” ...

  8. 【转】CoreData以及MagicalRecord (一)

    先粗略的了解下CoreData中的一些核心概念 1. CoreData 的核心概念 先上两幅关键的概念图 (1)NSManagedObjectModel 托管对象模型(MOM)是描述应用程序的数据模型 ...

  9. Java随机数生成原理--转稿

    1.Math库里的static(静态)方法random() 该方法的作用是产生0到1之间(包括0,但不包括1)的一个double值. double rand = Math.random(); 2.通过 ...

  10. 基于maven进行spring 和mybatis的整合(Myeclpise)

    学习日记:基于maven进行spring和mybatis的整合,进行分页查询 什么是maven:maven是一个项目管理工具,使用maven可以自动管理java项目的整个生命周期,包括编译.构建.测试 ...