经典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--- 创建 备 ...
随机推荐
- 剑指offer 替换字符串中的空格
void replaceSpace(char *str,int length) { ) return; ; ; ; while(str[originlen]!='\0') { if(str[origi ...
- 轻轻谈一下seaJs——模块化开发的利器
"仅做一件事,做好一件事." 这个应该就是seaJs的精髓了. 我在自己的一些项目中使用过seaJs.对其算是了解一二.如今就班门弄斧.轻轻地谈一下. 首先上一段度娘的话: &qu ...
- k8s 集群基本概念
一.概述: kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) ...
- C++ DLL注册
今天项目中需要用C++实现对几个DLL文件的注册,查了许多资料,总结如下: #include <SHLWAPI.H> #pragma region DLL 注册与反注册 add by wh ...
- <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解
MVC 3 数据验证 Model Validation 详解 再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...
- apk混淆打包注意事项
混淆打包搞了好几天才初步了解,其中碰到很多Debug正常,Release的apk不能用,基本都是第三方的jar的问题,所以要排除混淆. 1. Json解析对象出错 用到fastJson或者GJson的 ...
- 一年三篇IF大于7的牛人告诉你怎么写SCI
一年三篇IF大于7的牛人告诉你怎么写SCI 1 研究生必备四本 俗话说好记性不如烂笔头,所以一定要首先养成做笔记的好习惯!作为研究生下面这几个本子是必不可少的: 1.实验记录本(包括试验准备本),这当 ...
- .net 资源
基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.net和C#.net通用权限系统组件功能教程 http://down.51cto.com/zt/1 ...
- asp.net 下载文件(图片、word、excel等)
string filePath = Server.MapPath("~/excel.xlsx"); if (File.Exists(filePath)) { FileStream ...
- WinForm 控件的布局(Dock属性)的注意点
对于Dock属性,添加控件的顺序会影响它们停驻的方式.例如,如果你对窗体添加控件A,指示其停驻填充(Fill), 然后你对窗体添加控件B并指示其停驻顶部(Top),控件B将覆盖控件A的上部.原因就是控 ...