Oracle 使用分析函式實現小計合計

2021-06-01 20:18:25 字數 1451 閱讀 1071

select grouping(vsaltype) as sq,

vsaltype || '小計計' vsaltype,

sum(amount) as amount,

'' vvin,

'' vpropertywh,

'' vpropertywhdesc

fromsptw90_inventory_ncs_tmp

group by rollup(vsaltype)

得到結果為:

:分析結論:

grouping(上捲字段)兩種情況:

sq為0情況:只是按照vsaltype進行group by

sq為1情況:把小計情況進行一次彙總,即別文寫的 group by  rollup(a,b,c)的流程是group by (a,b,c)->

group by (a,b) ->group by (a)-> 全表,本例只是執行後兩句

select -1 as sq,

vsaltype,

amount,

vvin,

vpropertywh,

vpropertywhdesc

from sptw90_inventory_ncs_tmp

得到結果為:

分析結論:得到所有明細資料,並賦乙個新的虛擬欄位sq 並設sq為-1

這樣則:

select sq, vsaltype, amount, vvin, vpropertywh,vpropertywhdesc

from (select sq, vsaltype, amount, vvin, vpropertywh, vpropertywhdesc

from (select grouping(vsaltype) as sq,

vsaltype || '小計計' vsaltype,

sum(amount) as amount,

'' vvin,

'' vpropertywh,

'' vpropertywhdesc

from sptw90_inventory_ncs_tmp

group by rollup(vsaltype)

union all

select -1 as sq,

vsaltype,

amount,

vvin,

vpropertywh,

vpropertywhdesc

from sptw90_inventory_ncs_tmp

where 1 = 1) g

where g.sq <> 1

order by vsaltype, sq)

把sq為0,1行數與sq為-1行數進行union all

在where條件進行限定,取出sq非1的資料即sq<>1

so,取最終合計的話只需取出sq =1的情況

最終模型應該是這種效果(從oracle中匯出的excel):

oracle 分析函式的使用

1.rownum與rowid rownum 行數 行號.在查詢語句中之使用於 rowid 編碼 編號 唯一識別號.他們都是偽列,可以理解成表中的乙個列只是他們並不是你建立的。同樣是偽列區別是什麼呢?rowid是你錄入資料時有資料庫自動為這條記錄新增的唯一的18位編號是乙個物理編號用於找到這條記錄 順...

oracle分析函式的使用

1.實現組資料的相加,如下列資料,以前的處理方法是在前台進行加總處理。如果用分析函式處理就直接在後台處理了。74pcs 74 4 pcs70 1pcs 69 4 pcs65 4pcs 61100 pcs161 4pcs 157 2 pcs155 2pcs 153 2 pcs151 2pcs 1492...

oracle分析函式

oracle分析函式 sql plus環境 1 group by子句 create test table and insert test data.create table students id number 15,0 area varchar2 10 stu type varchar2 2 sc...