【问题标题】:Restrict records returned by view with group by rollup whilst modifying totals在修改总计时使用 group by rollup 限制视图返回的记录
【发布时间】:2015-05-29 16:16:29
【问题描述】:

我需要创建一个具有某些列的平均值的视图。此视图将按月和年访问,我想将其创建为全局(全表扫描),然后在不同的条件下使用,例如:2015 年 5 月 / 2015 年 04 月

现在我是这样创建的:

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 的所有天数,最后一行是平均值

更新

正如 Ben 所说,我无法使用汇总创建一个视图来执行此操作,我使用了一个简单的联合来计算平均值。当然,这只适用于几个月和一年。

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_* 已经有日/月/年的总和。 在 union 中,我只是使用 AVG 函数来创建平均值。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    简单的答案是您不能……您正在尝试查询不存在的数据。如果您尝试通过执行以下操作来解决此问题,则总数仍将适用于您的整个原始结果集。

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

    您每次都必须写出查询。或者,如果您总是想要当前月份,则可以将视图限制为仅包含此数据。

    【讨论】:

    • HI Ben 看看我的更新,如果你认为这是正确的,我会改变它作为一个答案
    猜你喜欢
    • 2011-11-16
    • 2023-03-09
    • 2021-12-16
    • 2014-07-02
    • 2018-11-27
    • 2012-03-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多