当前位置:  数据库>oracle

Oracle子句GROUP BY CUBE

    来源: 互联网  发布时间:2017-05-04

    本文导语: 问题大致如下: 一个对象有2的八次方(256)个状态,每个状态需要8个状态位来标识。问:如何在状态表表Q内插入如下所有256个状态的数据: 状态ID 状态位1 状态位2 状态位3 状态位4 状态位5 状态位6 状态位7 状态位8 ...

问题大致如下:

一个对象有2的八次方(256)个状态,每个状态需要8个状态位来标识。问:如何在状态表表Q内插入如下所有256个状态的数据:

状态ID

状态位1

状态位2

状态位3

状态位4

状态位5

状态位6

状态位7

状态位8

1001

0

0

0

0

0

0

0

0

1002

1

0

0

0

0

0

0

0

......

 

 

 

 

 

 

 

 

1256

1

1

1

1

1

1

1

1




版主dingjun123解答如下:

WITH t AS
(SELECT 1 a,2 b,3 c,4 d,5 e,6 f,7g,8 h FROM dual)
SELECT
decode(GROUPING(a),1,0,1) a,
decode(GROUPING(b),1,0,1) b,
decode(GROUPING(c),1,0,1) c,
decode(GROUPING(d),1,0,1) d,
decode(GROUPING(e),1,0,1) e,
decode(GROUPING(f),1,0,1) f,
decode(GROUPING(g),1,0,1) g,
decode(GROUPING(h),1,0,1) h
FROM t
GROUP BY CUBE(a,b,c,d,e,f,g,h);











 

此处对版主提供的SQL进行下简单分析,因为分析之前读不懂这个SQL(^_^)。

CUBE:该函数会对给定的参数列进行组合。所谓组合,即如果GROUP BY CUBE有A,B,C三个参数,则语句会分别按分组A,B,C,AB,AC,BC,ABC进行汇总。所以版主答案会有256行,这是组合的结果。

 

GROUPING:该函数只有在使用CUBE和ROLLUP的时候可用。(ROLLUP跟CUBE有几分相像,只是分组方式不同)。其参数列必须是GROUP BY子句中的1列(如果想传入多列,可查询GROUPING_ID函数;小心不要跟GROUP_ID函数混淆。),如果该列为空则返回1,否则返回0.

 

GROUP BY CUBE(c1,c2,...)可能会产生一些不需要的汇总结果。可以考虑使用GROUP BY GROUPING SETS指定分组方式。

 

另外针对此问题的情形,感觉可以不用DECODE,不当之处,还请指教。

WITH t AS

(SELECT 1 a,2 b,3 c,4 d,5 e,6 f,7g,8 h

FROM dual)

SELECT

GROUPING(a) a,

GROUPING(b) b,

GROUPING(c) c,

GROUPING(d) d,

GROUPING(e) e,

GROUPING(f) f,

GROUPING(g) g,

GROUPING(h) h

FROM t

GROUP BY CUBE(a,b,c,d,e,f,g,h);


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • jquery iis7站长之家
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,