暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用解析函数的YTD逻辑

askTom 2018-01-12
537

问题描述

嗨,汤姆,

我正在尝试查看YTD。我有下面的观点,

create or replace view billsummary as
select  szRegionCode,
        szState,
  szPartitionCode,
  szProduct,
  TO_CHAR(dtSnapshot,'YYYY.MM') szMonthYear,
  szJioCenter,
  dtSnapshot,
  szCustomerCategory,
  iCycleDay,
  fbillamt,
  ibillcnt
  sum(CRBC.fbillamt) over (partition by szRegionCode, szState, CRBC.szProduct, TO_CHAR(CRBC.dtSnapshot,'YYYY') , CRBC.szCustomerCategory, iCycleDay
  order by partition by szRegionCode, szState, CRBC.szProduct, CRBC.dtSnapshot , CRBC.szCustomerCategory, iCycleDay) fytdbillamt
  sum(CRBC.ibillcnt) over (partition by szRegionCode, szState, CRBC.szProduct, TO_CHAR(CRBC.dtSnapshot,'YYYY') , CRBC.szCustomerCategory, iCycleDay
  order by partition by szRegionCode, szState, CRBC.szProduct, CRBC.dtSnapshot , CRBC.szCustomerCategory, iCycleDay) iytdBillcnt
From BillCollection;
复制


假设表BillCollection具有从2017年1月到2017年12月的数据。如果我在sql下执行2017年12月月,它应该给我12月月产生的所有账单金额的总和 (MTD) 和从2017年1月到2017年12月 (YTD) 产生的所有账单金额的总和。但是,年初至今的数字根本不匹配。您能否指导我如何编写上述视图?

Select szMonthYear, szregioncode, sum(fbillamt) MTD , sum (fytdbillamt) YTD
From billsummary
order by szMonthYear
复制

专家解答

嗯 ..... 在我们开始之前,这里的观点有些不对劲

sum(CRBC.fbillamt) over (partition by ... order by partition by ...) fytdbillamt
复制


因为这不是有效的语法,例如

SQL> with t as ( select 1 x, 2 y, 3 z from dual)
  2  select sum(x) over ( partition by y order by partition z )
  3  from t;
select sum(x) over ( partition by y order by partition z )
                                                       *
ERROR at line 2:
ORA-00907: missing right parenthesis
复制


在不尝试做太多假设的情况下,重要的是要意识到一个视图将首先尊重视图 * 定义 *,因此一个视图确实如此:

create view V as
select ...,
       sum(x) over () as blah
复制


会让列 'blah' 是表中所有行计算的总和。所以即使你这样做了:

从V中选择 * 其中name = 'jones'

然后,从 'blah' 返回的值仍将是所有行的总数,而不仅仅是name = 'BLAH' 的行


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论