0.最终效果

手中有这样一张汇总的数据表,汇总的方式并不是我们想要的,因为小黑,小红的数据并不完善

我们想得到这样的结果,即使该用户没用一些数据,我们也用null值补全

1.数据

手中有这样一张进货表Purchase,数据如下:

select name,type,data_num from
(select '小白'name,'clothes'type,2 data_num from dual union all
select '小白'name,'clothes'type,2 data_num from dual union all
select '小白'name,'clothes'type,2 data_num from dual union all
select '小白'name,'clothes'type,1 data_num from dual union all
select '小白'name,'trousers'type,2 data_num from dual union all
select '小白'name,'trousers'type,4 data_num from dual union all
select '小绿'name,'clothes'type,1 data_num from dual union all
select '小绿'name,'trousers'type,4 data_num from dual union all
select '小绿'name,'trousers'type,5 data_num from dual union all
select '小绿'name,'hat'type,2 data_num from dual union all
select '小绿'name,'hat'type,3 data_num from dual union all
select '小黑'name,'clothes'type,1 data_num from dual union all
select '小黑'name,'trousers'type,1 data_num from dual union all
select '小黑'name,'trousers'type,10 data_num from dual union all
select '小黑'name,'hat'type,2 data_num from dual union all
select '小黑'name,'hat'type,1 data_num from dual union all
select '小黑'name,'hat'type,2 data_num from dual)Purchase

一张售出的表Sold,数据如下:

select name,type,data_num from
(select '小红'name,'hat'type,1 data_num from dual union all
select '小白'name,'clothes'type,1 data_num from dual union all
select '小白'name,'trousers'type,2 data_num from dual union all
select '小绿'name,'clothes'type,2 data_num from dual union all
select '小绿'name,'trousers'type,2 data_num from dual union all
select '小绿'name,'hat'type,2 data_num from dual )Sold

2.整合

将数据以name字段汇总为一行数据,这也是很觉得的事情:

select name,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Purchase
where 1=1 /*这里加入一些限制*/ group by name

select name,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Sold
where 1=1 /*这里加入一些限制*/ group by name

3.合并

如果需求:你要将售出和进货表合并起来,也并不难,只需要新增一个dataType栏位即可:

/*这里我们手动指定dataType数据*/select name,'Purchase'dataType,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Purchase
where 1=1 /*这里加入一些限制*/ group by name
union all
select name,'Sold'dataType,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Sold
where 1=1 /*这里加入一些限制*/ group by name
order by name asc,dataType desc

4.补全

数据看起来并不是我们想要的样子,因为小黑只有Purchase表的数据,小红只有Sold表的数据,我们想要的效果是:哪怕小黑在Sold表,小红在Purchase表里没有数据,也要显示出来.

我们需要Sold表的数据补全Purchase表,需要Purchase表的数据补全Sold表,代码如下:

select * from(select name,'Purchase'dataType,'data'type2,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Purchase
where 1=1 /*这里加入一些限制*/ group by name
union all
select name,'Sold'dataType,'data'type2,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Sold
where 1=1 /*这里加入一些限制*/ group by name
union all
/*Sold伪数据*/
select name,'Sold'dataType,'pseudoData'type2,
null clothes,
null trousers,
null hat
from Purchase
where 1=1 /*这里加入一些限制*/ group by name
union all
/*Purchase伪数据*/
select name,'Purchase'dataType,'pseudoData'type2,
null clothes,
null trousers,
null hat
from Sold
where 1=1 /*这里加入一些限制*/ group by name )order by name asc,datatype desc ,type2 asc
/*1=1的限制是对该表的限制,伪表的限制应该和该table的限制一致*/

然后就很好办了,只需要group by函数就可以实现合并效果:

select name,datatype,
sum(clothes)clothes,sum(trousers)trousers,sum(hat)hat
from(select name,'Purchase'dataType,'data'type2,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Purchase
where 1=1 /*这里加入一些限制*/ group by name
union all
select name,'Sold'dataType,'data'type2,
sum(case when type='clothes' then nvl(data_num,0) end)clothes,
sum(case when type='trousers' then nvl(data_num,0) end)trousers,
sum(case when type='hat' then nvl(data_num,0) end)hat
from Sold
where 1=1 /*这里加入一些限制*/ group by name
union all
/*Purchase伪数据*/
select name,'Sold'dataType,'pseudoData'type2,
null clothes,
null trousers,
null hat
from Purchase
where 1=1 /*这里加入一些限制*/ group by name
union all
/*Sold伪数据*/
select name,'Purchase'dataType,'pseudoData'type2,
null clothes,
null trousers,
null hat
from Sold
where 1=1 /*这里加入一些限制*/ group by name )
group by name,datatype order by name asc,datatype desc

这样,小黑就有了Sold数据,小红有了Purchase数据,虽然为空,但是看起来已经好很多了,拿给别人使用,也是比较舒服的,不知道小白啰哩啰唆有没有给大家讲明白,感谢大家的支持

Oracle 补全数据相关推荐

  1. 在excel中使用插值法补全数据

    因为需要统计49-14年中国的性别比例,其中的数据有缺失,为了补足数据且不想改变数据的趋势,所以决定采用差值法的方法补全数据. 具体的方法是调用excel中的TREND函数. TREND函数的参数有四 ...

  2. hive经典面试题4--如何用分时数据计算分时累计数据?如何在分时累计数据为空的时候去补全数据?

    背景: 在互联网公司经常会用每10分钟为维度去统计某一个指标,这种统计我们称为分时数据.例如10分钟内某个渠道的安装数据,通过这个数据可以实时查看这个渠道质量好坏,如果这个渠道质量不行,那么就停止投放 ...

  3. javascript自动补全(数据用js数组存放)

    航空公司城市对自动提示补全JS //**************************************************************************** // Au ...

  4. Oracle Supplemental 补全日志介绍

    转. Oracle补全日志(Supplemental logging)特性因其作用的不同可分为以下几种:最小(Minimal),支持所有字段(all),支持主键(primary key),支持唯一键( ...

  5. 基层教学组织评估系统5_系统管理员数据维护模块功能完善,优化教学组织名称的输入提示补全,项目打包部署篇

    目录 一.完善 二.项目打包 三.部署 四.报错解决 五.数据初始 一.完善 系统管理员数据维护模块功能完善 优化教学组织名称的输入提示补全 数据对应格式bug修复 1.系统管理员数据维护模块功能完善 ...

  6. oracle中日期自动补全,没有数据自动补0

    oracle中日期自动补全,没有数据自动补0 1. 描述 最近在项目中遇到一个问题,在进行oracle相关查询操作的时候,查询某个月的数据,这个月中某些日期没有数据,就造成了日期的缺失,我想做的就是不 ...

  7. 基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)

    作者:Tom Hardy Date:2020-02-09 来源:基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)

  8. oracle 64位客户端_oracle的管理工具toad如何设置命令补全

    概述 网上有很多关于设置toad命令行补全的文章,发现根本不好使,下面分享一下可行的设置方法 一.安装oracle客户端 1.到ORACLE 网站下载instantclient客户端 https:// ...

  9. powerbuilder查询符合条件的数据并且过滤掉其他数据_论文浅尝 ISWC2020 | KnowlyBERT: 知识图谱结合语言模型补全图谱查询...

    论文笔记整理:胡楠,东南大学博士. 来源:ISWC 2020 动机 像Wikidata这样的现代知识图已经捕获了数十亿个RDF三元组,但是它们仍然缺乏对大多数关系的良好覆盖.同时在NLP研究的最新进展 ...

最新文章

  1. 揭开JVM所看到的try/catch/finally
  2. 存储过程内建临时表和临时函数,合并一个由存储过程返回的表
  3. 4行关键代码实现灰色模型GM(1, 1)
  4. 我看TechEd 2012之技术热点
  5. OpenStack——基于EXSI安装OpenStack解决方案
  6. CentOS7—HAProxy安装与配置
  7. ANT出现“警告: 编码 GBK 的不可映射字符”解决方法
  8. kali远程登录window_手把手教你配置VS Code远程开发工具,工作效率提升N倍
  9. 使用Zabbix2.2自带的Mysql监控模板监控数据库
  10. mac下cordova的ios-deploy安装问题
  11. Java多线程核心技术
  12. ios 获取最后一个cell_ios – UICollectionView estimatedItemSize – 最后一个单元格未对齐...
  13. win10 64位系统 excel2016 vba odbc方式 访问 oracle远程数据库 免安装oracle客户端
  14. sox 转换pcm格式采样率
  15. 失败产品手册:一款影音娱乐平台的败局
  16. Flash Builder实用快捷键集锦
  17. IDEA中JDBC连接MYSQL数据库步骤超详细总结
  18. 一文读懂 HBase 使用场景
  19. 28岁转行web前端,参加成都前端web培训可行吗?
  20. SpringBoot 整合activiti5.22 实现一个完整的请假流程

热门文章

  1. r5 5600x配什么主板和显卡
  2. 《面试八股文》之GitHub中文社区Java 领域又一份备战神器,开冲金三银四
  3. 第二阶段:JavaAPI总复习一一一之一一一02
  4. 阿里研发工程师JAVA暑期实习二面
  5. C++多线程helloWord
  6. Qt connect 第五个参数
  7. percona-toolkit工具使用介绍
  8. 看看这篇U盘防毒的文章吧,希望对你有用。
  9. Python【小游戏合集】之自己制作一个贪吃蛇游戏~
  10. [详解]Twitter开源分布式自增ID算法snowflake,附演算验证过程