楼主: dingjun123

[精华] 使用Partitioned Outer Join实现稠化报表

[复制链接]
论坛徽章:
15
2010新春纪念徽章
日期:2010-03-01 11:19:492015年新春福章
日期:2015-03-06 11:58:18暖羊羊
日期:2015-03-06 10:26:33美羊羊
日期:2015-03-04 14:52:28优秀写手
日期:2014-06-25 06:00:12ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:142011新春纪念徽章
日期:2011-03-07 09:37:172011新春纪念徽章
日期:2011-02-18 11:43:362010广州亚运会纪念徽章:保龄球
日期:2010-11-11 17:57:122010广州亚运会纪念徽章:田径
日期:2010-11-11 17:57:05
41#
发表于 2011-1-10 22:33 | 只看该作者
nice  顶一个

使用道具 举报

回复
论坛徽章:
9
生肖徽章2007版:鼠
日期:2008-01-02 17:35:532010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB元老
日期:2010-11-25 21:23:432011新春纪念徽章
日期:2011-02-18 11:43:34蛋疼蛋
日期:2011-05-18 12:56:16蛋疼蛋
日期:2011-07-05 23:24:04蛋疼蛋
日期:2011-09-01 13:05:43ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152013年新春福章
日期:2013-02-25 14:51:24
42#
发表于 2011-6-5 12:40 | 只看该作者
好东东呀

使用道具 举报

回复
论坛徽章:
55
红孩儿
日期:2009-04-11 12:56:14嫦娥
日期:2009-05-13 09:18:36兰博基尼
日期:2013-08-05 11:34:06阿斯顿马丁
日期:2013-12-05 17:02:082014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
43#
发表于 2011-6-14 16:05 | 只看该作者
好东西,学习

使用道具 举报

回复
论坛徽章:
3
ITPUB官方微博粉丝徽章
日期:2011-06-29 09:48:25ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15秀才
日期:2016-02-18 09:23:46
44#
发表于 2011-6-16 15:49 | 只看该作者
Mark一下,楼主好样的。泡妞也不差吧?哈哈

使用道具 举报

回复
论坛徽章:
0
45#
发表于 2011-6-22 20:24 | 只看该作者
写的不错,学习中

使用道具 举报

回复
论坛徽章:
3
迷宫蛋
日期:2011-09-13 15:03:48ITPUB十周年纪念徽章
日期:2011-09-27 16:33:52ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29
46#
发表于 2011-8-31 10:41 | 只看该作者
这个报表不是我想看的最终报表,我需要的报表是稠密报表,也就是对于每个产品,横跨所有年、所有区域都应该有汇总数据,但是现在缺失了很多数据,比如对于产品A来说,少了07年4个区域的汇总数据,08年少了北区的汇总数据,最终的报表数据应该有年数目(2)*产品数(3)*区域数(4)=24行记录。


    现在需要填补每个产品所有年份和所有区域2维缺失数据,那么怎么做呢?首先需要补全每个产品所有年或者每个产品所有区域的数据,然后按产品和年分区或产品和区域分区再与所有区域或所有年外连接,这样就能填充缺失数据了,所有对2维缺失数据填充有2步PARTITIONED OUTER JOIN,其他维度的类似。  



这个我是这样实现:
SELECT years,product_name,regions,SUM(sales) sum_sales FROM   
   (SELECT m.years,t.product_name,m.regions,nvl(sales,0) sales
    FROM t
    PARTITION BY (t.product_name)
    RIGHT JOIN
    (SELECT years,regions FROM
      (SELECT DISTINCT years FROM t),
      (SELECT DISTINCT regions FROM t)) m
    ON t.years=m.years
    AND t.regions=m.regions)
GROUP BY years,product_name,regions
ORDER BY years,product_name,regions
不知有问题否?

使用道具 举报

回复
论坛徽章:
3
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:54
47#
发表于 2011-9-5 18:13 | 只看该作者
dingjun123 :谢谢!

使用道具 举报

回复
论坛徽章:
4
2011新春纪念徽章
日期:2011-02-18 11:43:32蜘蛛蛋
日期:2011-08-28 17:29:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:24
48#
发表于 2011-9-5 22:25 | 只看该作者
平时外连接都只用left join,毕竟先入为主
喜欢把主表放左边

看了俊哥举得例子,觉得在partition by使用right join更人性
特别是在多维填充部分
包含主要数据的只有一个,就先写出来
再用right join,剩下右边的都是辅助填充的表

使用道具 举报

回复
论坛徽章:
3
ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:142013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-07-25 17:08:39
49#
发表于 2012-9-3 14:50 | 只看该作者
记号

使用道具 举报

回复
论坛徽章:
1
SQL大赛参与纪念
日期:2011-04-13 12:08:17
50#
发表于 2012-9-6 11:53 | 只看该作者
真的学习了,以前对partition 的功能真的了解太局限了。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表