经典union的使用
一个用户下广告位 某一天有收入和支出 有支出不一定有收入 有收入不一定有支出 下例为按用户查询 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的使用的更多相关文章
- SQL FOR JSON PATH 返回 json
--直接返回 age FOR JSON PATH --返回值 [{"name":"张学友","age":60}] select c1, c2 ...
- [转]从两道经典试题谈C/C++中联合体(union)的使用
宋宝华 21cnbao sweek@21cn.com 试题一:编写一段程序判断系统中的CPU是Little endian还是Big endian模式? 分析: 作为一个计算机相关专业的人,我们应该在计 ...
- [Swift]经典解题思路:联合查找Union Find
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 经典SQL语句大全
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- 【转载】经典SQL语句大全
[原文地址]http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html 一.基础 1.说明:创建数据库CREATE DATABAS ...
- 让UNION与ORDER BY并存于SQL语句当中
在SQL语句中,UNION关键字多用来将并列的多组查询结果(表)合并成一个结果(表),简单实例如下: SELECT [Id],[Name],[Comment] FROM [Product1] UNIO ...
- HDU 5652 India and China Origins(经典并查集)
特别经典的一个题,还有一种方法就是二分+bfs 题意:空间内n*m个点,每个点是0或者1,0代表此点可以走,1代表不能走.接着经过q年,每年一个坐标表示此点不能走.问哪年开始图上不能出现最上边不能到达 ...
- POJ 1182 食物链 (经典带权并查集)
第三次复习了,最经典的并查集 题意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们 ...
- 20160411002 经典SQL语句大全
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
随机推荐
- java学习之三种常用设计模式
一.适配器设计模式 简单来说,就是通过一个间接类来选择性的来覆写一个接口 interface Window{ public void open() ; // 打开窗口 public void clos ...
- javascript中的继承方法
从Javascript面向对象编程(二):构造函数的继承这里,可以看到详细的说明. 我只是将其中的例子做成html文件,便于调试罢了. 1. 构造函数绑定 <html> <head& ...
- Sequence operation(线段树区间多种操作)
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 设置ToggleButton、Switch、CheckBox和RadioButton的显示效果
ToggleButton.Switch.CheckBox和RadioButton都是继承自android.widget.CompoundButton,意思是可选择的,因此它们的用法都很类似.Compo ...
- 用ADB(Android Debug Bridge)实时监测Android程序的运行
监控Android设备上程序的运行,需要ADB的配合,具体ADB工具的介绍以及命令选项可见博客: http://blog.csdn.net/mliubing2532/article/details ...
- 优质UI的7条准则(一)
本文原文来自于 Medium:https://medium.com/@erikdkennedy/7-rules-for-creating-gorgeous-ui-part-1-559d4e805cda ...
- ASP.NET MVC开发必看系列
一.关于HTTP协议的那些事 这可以说我们开发WEB程序的空气,推荐不断温故知新! HTTP协议 (一) HTTP协议详解 HTTP协议 (二) 基本认证 HTTP协议 (三) 压缩 HTTP协议 ( ...
- js获取当前年月日
function GetDate(){ var now = new Date(); var year = now.getFullYear(); //年var month = now.ge ...
- notepad++ 必装插件
nppftp ;FTP客户端,你懂的: explorer:设置常用文件链接:打开当前文件路径:
- Filemanager 的使用
filemanager的使用包括: 1.创建文件夹 2.删除文件夹 3.写入文件 4.复制文件 5.移动文件 6.删除文件 一.创建文件夹 首先宏的定义一个字符串作为地址的来获取当前的docum ...