1. 程式人生 > >Oracle關於Group by合計、小計的使用

Oracle關於Group by合計、小計的使用

方法:group by rollup(col1,col2)

group by cube(col1,col2)

具體例子:

 select G_GOODS_OUT.DEPTID,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '01', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_01,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '02', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_02,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '03', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_03,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '04', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_04,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '05', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_05,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '06', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_06,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '07', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_07,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '08', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_08,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '09', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_09,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '10', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_10,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '11', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_11,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '12', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_12,
  sum(G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE) YEAR_SUM
  from G_GOODS_OUT
  inner join G_GOODS ON G_GOODS.ID=G_GOODS_OUT.GOODS_ID
  where 1=1 and (G_GOODS_OUT.ACTDATE>=to_date('2013-01-01 00:00:01','yyyy-MM-dd hh24:mi:ss') and G_GOODS_OUT.ACTDATE<=to_date('2013-12-31 23:59:59','yyyy-MM-dd hh24:mi:ss'))
  group by ROLLUP(G_GOODS_OUT.DEPTID)

統計結果:
部門ID 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 合計
1 1 2 3 4 5 6 7 8 9 10 11 12 78
1 2 3 4 5 6 7 8 9 10 11 12 78

例子2:

select G_GOODS_OUT.DEPTID,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '01', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_01,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '02', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_02,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '03', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_03,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '04', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_04,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '05', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_05,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '06', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_06,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '07', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_07,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '08', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_08,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '09', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_09,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '10', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_10,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '11', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_11,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '12', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_12,
  sum(G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE) YEAR_SUM
  from G_GOODS_OUT
  inner join G_GOODS ON G_GOODS.ID=G_GOODS_OUT.GOODS_ID
  where 1=1 and (G_GOODS_OUT.ACTDATE>=to_date('2013-01-01 00:00:01','yyyy-MM-dd hh24:mi:ss') and G_GOODS_OUT.ACTDATE<=to_date('2013-12-31 23:59:59','yyyy-MM-dd hh24:mi:ss'))
  group by CUBE(G_GOODS_OUT.DEPTID)

結果與上述的相似

例子:關於grouping的使用

select (case when grouping(G_GOODS_OUT.DEPTID)=1 then '合計' else cast(G_GOODS_OUT.DEPTID as varchar(20)) end ) DEPTID,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '01', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_01,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '02', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_02,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '03', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_03,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '04', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_04,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '05', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_05,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '06', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_06,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '07', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_07,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '08', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_08,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '09', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_09,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '10', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_10,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '11', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_11,
  sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'), '12', G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE,null)) as MONTH_12,
  sum(G_GOODS_OUT.SQNUM*G_GOODS.U_PRICE) YEAR_SUM
  from G_GOODS_OUT
  inner join G_GOODS ON G_GOODS.ID=G_GOODS_OUT.GOODS_ID
  where 1=1 and (G_GOODS_OUT.ACTDATE>=to_date('2013-01-01 00:00:01','yyyy-MM-dd hh24:mi:ss') and G_GOODS_OUT.ACTDATE<=to_date('2013-12-31 23:59:59','yyyy-MM-dd hh24:mi:ss'))
  group by CUBE(G_GOODS_OUT.DEPTID)

結果為:
部門ID 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 合計
1 1 2 3 4 5 6 7 8 9 10 11 12 78
合計 1 2 3 4 5 6 7 8 9 10 11 12 78
grouping(col1)的結果為1表示是合計結果,否則是普通聚合結果

注:其實sql Server也是支援group by rollup與group by cube 語法的

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 後面繼續更新----

相關推薦

Oracle關於Group by合計的使用

方法:group by rollup(col1,col2) group by cube(col1,col2) 具體例子: select G_GOODS_OUT.DEPTID, sum(decode(to_char(G_GOODS_OUT.ACTDATE,'MM'),

------------------合計的用法-----------------

create table #t(a int,b int,c int,d int,e int) insert into #t values(1,2,3,4,5) insert into #t values(1,2,3,4,6) insert into #t values(1,2

postgre——caseunion總計(GROUP BY ROLLUP)寫法

//將幾張不同表結構的資料全部合併在一起,使用了case、union,同時實現小計總計//小計總計使用的 GROUP BY ROLLUP函式,GROUP BY ROLLUP使用雙括號將欄位括起來,是將這些欄位分為一組,只會產生一個總計select case when t_a

運用Reporting Service中合計,Pivot等功能快速實現報表

部門<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 竟陵 九真 皁市 合計 次數 人數 次數 人數 次數 人數 次數 人數 客戶服務 **1後臺投訴單

ecshop購物車頁面使用ajax更新商品數量總價,點選加號和減號

第一步 我先把 我的購物車頁面flow.dwt的商品列表部分的程式碼貼出來,這樣比較起來方便一點 <div class="flowBox"> <h6><span>{$lang.goods_list}</span>&

資料報表開發技巧:自動為資料報表新增【【總計】行

       在開發ERP系統的資料報表時,幾乎都是需要看到【小計】、【總計】這樣的彙總資料的,在資料報表的顯示列表中,最下面的一行通常就是【小計】或者【總計】的彙總行。如果手動為每個報表都增加彙總行,那也是一份不小的工作量。   所以,如果能自動為每個資料報表自動新增【小

Retrofit2+RxJava學習(一):單檔案多檔案上傳之填平的坑

從Eclipse轉戰AndroidStudio已經有兩個月了。先誇誇Google親兒子的強大吧,各種方便就不一一道來了。主要是現在的Android陣營已經不想前兩年了。各種開源框架開源庫。也正是如此,AndroidStudio匯入開源的專案非常方便。自從Goog

GridView自動求和求平均值

轉自清清月兒gridview72絕技,略有改動 前臺:唯一的花頭就是設定ShowFooter="True" private double sum = 0;//取指定列的資料和,你要根據具體情況對待可能你要處理的是int protected void GridView1_R

購物車 如何實現數量增加,合計,總數JSP中頁面的變化

樣式的調節: <style> div.cartDiv { max-width: 1013px; margin: 10px auto; color: black; } table.cartProductTable { width: 100%; font

Oracle 使用分析函式實現合計

select grouping(vsaltype) as sq,                          vsaltype || '小計計' vsaltype,                          sum(amount) as amount,                     

OLAP 支援---ROLLUP和CUBE語句 group by 的增強版本語句!可進行分層分組模式外 (與總計)

OLAP 支援 聯機分析處理(On-Line Analytical Processing,簡稱 OLAP)具有在一條 SQL 語句中執行復雜資料分析的功能,從而通過減少對資料庫的查詢次數來改進效能,而同時又能增加結果值。通過使用對 SQL 語句和視窗函式的

centos7下安裝Jdk8Tomcat8

entos serve env version 申請 解壓 started cat export 申請到一臺 三 豐 雲 免 費 主 機,安裝centos操作系統,記錄一下centos7下安裝Jdk8、Tomcat8的操作 一、JDK1.8 環境搭建 1、上傳文件解壓 [[

python日常

亂碼 技術 utf 查詢 顯示 blog -h 解決 .cn 1、查看變量類型: pring type(item) 2、解決list中的中文顯示亂碼 使用decode(‘string_escap‘)將數據庫查詢返回的將帶轉義的字節碼字符串轉換為成utf-8中文

JavaScript面向對象輕松入門之封裝(demo by ES5ES6TypeScript)

get scrip 鏈式調用 class www 資料 怎麽辦 宋體 概念   本章默認大家已經看過作者的前一篇文章 《JavaScript面向對象輕松入門之抽象》 為什麽要封裝?   封裝(Encapsulation)就是把對象的內部屬性和方法隱藏起來,外部代碼訪問該對象

JavaScript面向對象輕松入門之繼承(demo by ES5ES6)

element 增加 實現 原型 面向 pro es6 dog 關鍵字   繼承是面向對象很重要的一個概念,分為接口繼承和實現繼承,接口繼承即為繼承某個對象的方法,實現繼承即為繼承某個對象的屬性。JavvaScript通過原型鏈來實現接口繼承、call()或apply()來

這背後是蘇寧的“大店更大店更專”戰略的進一步落地。

chl 上線 dss vfl farm fgac wsfc arm tex 一直以來,蘇寧給外界的定位都是賣空調、冰箱、電視、百貨等家電3C產品,而今,除了這些常見商品,蘇寧竟然開始賣飛機和汽車了。 這不是玩笑,不是賣模型玩具類飛機,而是可以坐人可以駕駛飛行的真飛機。6月1

JavaScript面向對象輕松入門之多態(demo by ES5ES6TypeScript)

我會 維護 type 重載 prot 鼠標 案例 類方法 最大   多態(Polymorphism)按字面的意思就是“多種狀態”,同樣的行為(方法)在不同對象上有不同的狀態。  在OOP中很多地方都要用到多態的特性,比如同樣是點擊鼠標右鍵,點擊快捷方式、點擊桌面空白處、點擊

又更新,附近的程序程序後臺功能升級!

變更 微信 mage 進行 新增 會員 開發者 直接 素材 前幾天,小編在公眾號發布了一篇關於“附近的小程序”新功能的文章,那時候微信還沒有正式發出更新通知,昨天晚上11點,微信的更新通知就來了,這次不僅帶來了“附近的小程序”的新功能,還有小程序後臺管理功能升級。 “附

Tingq 模糊查詢 共多少條數據 最大平均求和值 升降序

string sys post nat sender type asp idt acl 頁面代碼 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="

8.05 確定兩個日期之間的秒時數

max rom diff all red 日期 date edi cas select datediff(ward_hd,allen_hd)*24 hr, datediff(ward_hd,allen_hd)*24*60 min,