查看: 4684|回复: 6

使用 group by cube() 实现组合

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2008-4-16 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用 group by cube() 实现组合

SELECT  DECODE(GROUPING(A),1,'A')||DECODE(GROUPING(B),1,'B')||DECODE(GROUPING(C),1,'C')||DECODE(GROUPING(D),1,'D') COB,
             SUM(NUM) SUMS
FROM (select 'A' a,NULL b,NULL c,NULL d,100 num from dual
     union all
         select  NULL,'B',NULL,NULL,100 from dual
     union all
         select  NULL,NULL,'C',NULL,100 from dual
     union all
         select  NULL,NULL,NULL,'D',100 from dual )
GROUP BY  CUBE(a,b,c,D)   
having a||b||c||d  IS NULL  
order by 1

[ 本帖最后由 pnixinq 于 2008-4-16 15:44 编辑 ]
论坛徽章:
87
2015年新春福章
日期:2015-03-06 11:58:182010广州亚运会纪念徽章:轮滑
日期:2010-09-23 17:19:212010年世界杯参赛球队:乌拉圭
日期:2010-07-14 17:54:242010年世界杯参赛球队:美国
日期:2010-06-30 13:13:582010年世界杯参赛球队:墨西哥
日期:2010-06-25 12:49:452010年世界杯参赛球队:墨西哥
日期:2010-04-05 10:23:502010新春纪念徽章
日期:2010-03-01 11:06:232010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:龙
日期:2009-11-12 16:31:13参与WIN7挑战赛纪念
日期:2009-11-09 11:50:09
2#
发表于 2008-4-16 15:35 | 只看该作者
什么意思呢?

使用道具 举报

回复
论坛徽章:
6
生肖徽章2007版:鼠
日期:2007-11-28 15:47:16辩论纪念章
日期:2010-11-15 09:41:55ITPUB社区12周年站庆徽章
日期:2013-10-08 14:53:15ITPUB社区12周年站庆徽章
日期:2013-10-08 14:56:08ITPUB社区12周年站庆徽章
日期:2013-10-08 14:59:19ITPUB社区12周年站庆徽章
日期:2013-10-08 15:00:34
3#
发表于 2008-4-16 16:00 | 只看该作者
什么意思

使用道具 举报

回复
论坛徽章:
33
劳斯莱斯
日期:2013-08-08 14:01:23三菱
日期:2013-09-28 10:16:06一汽
日期:2013-11-19 17:01:11凯迪拉克
日期:2013-12-07 17:11:282014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02itpub13周年纪念徽章
日期:2014-09-27 14:20:21itpub13周年纪念徽章
日期:2014-10-08 15:13:38懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
4#
发表于 2008-4-16 16:03 | 只看该作者
学习日记?
要说清楚啊

使用道具 举报

回复
论坛徽章:
18
生肖徽章2007版:虎
日期:2008-04-11 18:37:24奥运会纪念徽章:击剑
日期:2008-07-03 11:38:17迷宫蛋
日期:2011-05-10 13:03:40茶鸡蛋
日期:2011-05-10 13:05:16蜘蛛蛋
日期:2011-05-10 13:07:01灰彻蛋
日期:2012-12-10 11:47:16鲜花蛋
日期:2013-07-07 10:07:20
5#
发表于 2008-4-16 16:36 | 只看该作者
不错, 可以挑出不同的产品采购组合后的总价

使用道具 举报

回复
论坛徽章:
27
设计板块每日发贴之星
日期:2007-08-24 01:05:17奥运会纪念徽章:拳击
日期:2012-06-25 14:17:112012新春纪念徽章
日期:2012-01-04 11:49:54生肖徽章2007版:龙
日期:2009-04-07 18:18:35生肖徽章2007版:鸡
日期:2008-10-14 14:14:30生肖徽章2007版:龙
日期:2008-10-08 21:22:20铁扇公主
日期:2008-09-28 11:20:58授权会员
日期:2008-09-05 13:30:44ITPUB元老
日期:2008-09-05 13:30:31奥运会纪念徽章:摔跤
日期:2008-07-26 08:05:05
6#
发表于 2008-4-16 17:55 | 只看该作者
这个就是利用cute与grouping来进行组合汇总查询吧。
grouping函数如果当前的汇总记录是利用该字段得出的,grouping函数就会返回1,否则返回0
对于cute 则会根把a,b,c,d时行汇总,而且会对a,b,c,d分别汇总出一条记录
不知道这样说能不能清楚:)

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2008-03-13 10:32:44生肖徽章2007版:鸡
日期:2008-04-03 18:55:51数据库板块每日发贴之星
日期:2008-04-21 01:01:58奥运会纪念徽章:拳击
日期:2008-06-14 10:29:372014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
7#
发表于 2008-4-17 00:39 | 只看该作者
rollup 上钻,如rollup(a,b)的结果集相当于以下三部分的合集:group by a,group by a,b,不加group by子句的组合函数结果。
cube立方体,如cube(a,b) 的结果相当于a,b全部可能组合group by结果合集:group by a,group by b,group by ab,不加group by子句的组合函数结果。


举例:
SQL> select * from t1;

         A          B      VALUE
---------- ---------- ----------
       111          1       9000
       123          2       7000
       111          2       1000
       122          3       2000
       123          5       3000
       135          3       4000

6 rows selected.

SQL> select a,b,sum(value) from t1 group by rollup(a,b);

         A          B SUM(VALUE)
---------- ---------- ----------
       111          1       9000
       111          2       1000
       111                 10000
       122          3       2000
       122                  2000
       123          2       7000
       123          5       3000
       123                 10000
       135          3       4000
       135                  4000
                           26000

11 rows selected.

SQL> select a,b,sum(value) from t1 group by cube(a,b);

         A          B SUM(VALUE)
---------- ---------- ----------
                           26000
                    1       9000
                    2       8000
                    3       6000
                    5       3000
       111                 10000
       111          1       9000
       111          2       1000
       122                  2000
       122          3       2000
       123                 10000

         A          B SUM(VALUE)
---------- ---------- ----------
       123          2       7000
       123          5       3000
       135                  4000
       135          3       4000

15 rows selected.

SQL>

[ 本帖最后由 kdkd 于 2008-4-17 00:42 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

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