oracle rollup,cube子句的應用舉例(可以實現總計,小計)

wzdoxu88發表於2007-06-14

rollup,cube子句在ORACLE中可以用來做交叉報表,如:如總計,小計類的功能很容易實現;但是必須和group by 子句一起使用。舉例如下:


Oracle的Cube,Rollup子句的用法

產生交叉報表的情況,演示一個cube的例子


  create table test(sales varchar2(10),dest varchar2(10),revenue number);
  insert into test values('smith','hangzhou',1000);
  insert into test values('smith','wenzhou',2000);
  insert into test values('allen','wenzhou',3000);
  insert into test values('allen','wenzhou',4000);


SALES   DEST     REVENUE
  ---------- ---------- ----------
  smith   hangzhou     1000
  smith   wenzhou     2000
  allen   wenzhou     3000
  allen   wenzhou     4000
  
  比如說我們想統計每個sales的總銷售收入,每個sales在各個城市的銷售收入,另外還想知道每個城市所有sales的銷售收入總額,以及所有sales的總收入
  就像以下報表
  名字   hangzhou wenzhou 總計

------- ------------ ----------- ---------
  allen        7000    7000
  smith  1000    2000    3000
       1000    9000    10000
    
  那我們執行下面這條語句就行了
  select sales,dest,sum(revenue) from test group by cube(sales,dest);
  SALES   DEST  SUM(REVENUE)
  ---------- ---------- ------------
            10000  所有sales的總銷售收入
        wenzhou  9000   所有sales在溫州的銷售收入
       hangzhou  1000   所有sales在杭州的銷售收入
  allen        7000  allen的所有銷售收入
  allen   wenzhou  7000  allen在溫州的銷售收入
  smith        3000  smith所有的銷售收入
  smith   wenzhou  2000  smith在溫州的銷售收入
  smith   hangzhou 1000 smith在杭州的銷售收入
  8 rows selected.
  如果不想統計城市這個維度,那麼用rollup子句
  
        hangzhou wenzhou
  allen   7000  
7000
  smith   1000   2000   
3000
10000
  
select sales,dest,sum(revenue) from test group by rollup(sales,dest)
  
  SALES   DEST    SUM(REVENUE)
  ---------- ---------- ------------------
  allen    wenzhou    7000  allen在溫州的銷售收入
  allen          7000  allen的所有銷售收入
  smith   wenzhou     2000 smith在溫州的銷售收入
  smith   hangzhou   1000 smith在杭州的銷售收入
  smith          3000  smith 所有的銷售收入
               10000  所有sales的總銷售收入

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9294812/viewspace-918856/,如需轉載,請註明出處,否則將追究法律責任。

相關文章