2015-05-29 187 views
0

我需要創建一個具有某些列平均值的視圖。此視圖將按月份和年份訪問,我希望將其創建爲全局(全表掃描),稍後將以不同的條件使用,如:月份05年份2015年/月份04年份2015限制按彙總分組彙總返回的記錄,同時修改總計

現在我已創建它是這樣的:

create or replace view view_x_tipology as 
select dt_ref, gg_ref, mm_ref, yyyy_ref, avg(pcr_qt) pcr_tot, avg(ltr_qt) ltr_tot, avg(tbr_qt) tbr_tot, avg(qt_total) day_total 
    from stock_base 
group by rollup (dt_ref, gg_ref, mm_ref, yyyy_ref) 

我的主要問題是,總計(我不需要子總數)只有三個總有一個值,而所有其他字段爲空

DT_REF  GG_REF MM_REF YYYY_REF PCR_TOT  LTR_TOT  TBR_TOT  TOT 
28/05/2015 28  5  2015  118654  9433  19729  147816   
28/05/2015 28  5     118654  9433  19729  147816   
28/05/2015 28      118654  9433  19729  147816   
28/05/2015       118654  9433  19729  147816   
29/05/2015 29  5  2015  132132  10022  19687  161841   
29/05/2015 29  5     132132  10022  19687  161841   
29/05/2015 29      132132  10022  19687  161841   
29/05/2015       132132  10022  19687  161841   
             125393  9727,5  19708  154828,5  

例如,我想以這種方式查詢view_x_tipology

select * 
    from view_per_tipology 
where mm_ref = 5 
    and yyyy_ref = 2015 

與此查詢,我需要的所有天05/2015與平均

UPDATE最後一行

正如本說,我不能創建一個彙總一種觀點認爲,做這個,我用一個簡單的聯合來計算平均值。當然,這隻適用於幾個月和一年。

select dt_ref, gg_ref, mm_ref, yyyy_ref, pcr_qt, ltr_qt, tbr_qt, qt_total 
    from stock_base 
union 
select null, null, mm_ref, yyyy_ref, avg(pcr_qt), avg(ltr_qt), avg(tbr_qt), avg(qt_total) 
     from stock_base 
    group by rollup (dt_ref, gg_ref, mm_ref, yyyy_ref) 

stock_base上的字段qt_ *已經是日/月/年的總和。 在聯盟中,我只是使用AVG函數來創建平均值。

回答

0

簡單的答案是,你不能......你試圖查詢不存在的數據。如果您嘗試通過執行類似下面的操作來解決此問題,總數仍然適用於您的整個原始結果集。

select * 
    from view_per_tipology 
where (mm_ref = 5 and yyyy_ref = 2015) 
    or dt_ref is null 

您將不得不每次都寫出查詢。或者,如果您總是想要當前月份,則可以限制您的視圖僅包含此數據。

+0

HI Ben看看我的更新,如果您認爲這是正確的,我會將其更改爲答案 – Mistre83