一类查询统计问题的纵深思考.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一类查询统计问题的纵深思考.doc

源数据表——“内部帐户”部分属性的定义: 目的数据——内部帐户余额合计表及其属性的定义 在2个表中有3个属性(机构、币别、科目)是相同的,而这3个属性恰好是中的分组条件 看表1 中的“帐号”属性。由于表2是保存分组条件下所有帐户的余额合计,所以该表中没有“帐号”这个属性是必然的,因此该区别对的解决方案没有任何影响,不必考虑。 剩下的就只有2个关于余额的属性了。它们之间的差别则是显然的:表2中并没有表1中的状态属性“帐户余额方向”和“帐户余额”属性,但新增了“借方余额”、“贷方余额”2个新属性。仔细看看,这2个新属性实际上是由表1 中“帐户余额方向”状态值(借方、贷方)结合了“帐户余额”这个属性产生的。 可以知道解决的关键是:在统计帐户余额时,需要将表1中的“帐户余额方向”的状态值和“帐户余额”属性转化成表2中的“借方余额”属性和“贷方余额”属性。 方案模型A 1 ——GROUP BY 子句 STEP1:SELECT gl_bal_dire_flg, SUM(gl_acct_face_bal) FROM glacaaca GROUP BY gl_bal_dire_flg; -- 列“gl_bal_dire_flg”=0(借方)的SUM值为R1,=1 (贷方)的SUM值为R2; STEP2:INSERT INTO gltottot VALUES(999999999,999,R1,R2); 方案模型 ——利用数据库的文本文件插入机制: STEP1:将A1 从源数据表glacaaca统计产生的结果写入一个文本文件(假设为glacaaca.txt)。 STEP2:将该glac aaca. t x t 插入到目的数据表glt otto t中。 思路已经出来了,但问题是由文件插入到表中,必须满足一个前提:文件内容的格式与表的数据结构一致。显然,glacaaca.tx t 的内容格式与glt otto t 的数据结构并不一致。因此,需要在STEP1和STEP2之间增加一个步骤:对glacaaca.txt 的内容进行加工,确保其内容的格式与gltot tot 的数据结构保持一致。 方案模型A 2 ——批处理方案 STEP1:UNLOAD TO glacaaca.txt SELECT gl_bal_dire_flg, SUM(gl_acct_face_bal) FROM glacaaca GROUP BY gl_bal_dire_flg; -- 列“gl_bal_dire_flg”=0(借方)的SUM值为R1,=1 (贷方)的SUM值为R2; -- glacaaca.txt文件内容如下: 0|R1 1|R2 STEP2:——编写一个程序对glacaaca.txt进行加工处理: 将2行文本变为一行文本,并存入另一个名为gltottot .txt的文件中;其内容如下(注意格式有所变化): 999999999|999R1|R2 STEP3:LOAD FROM gltottot.txt INSERT INTO gltottot; 可也正是这个步骤,产生了一个新问题:这个步骤是必须的吗?如果有很多类似的查询,是不是每个都要额外写上这么一个文件处理程序?毕竟仅为了解决一个查询统计而单独编写一个对文本文件进行加工处理的辅助程序,无论从运行效率还是从开发效率的角度分析, 都将会使问题复杂化。 下面摘录的是一段比较真实的代码,是用Informix 的SPL编写: 表5 :方案模型A 3 ——存储过程 ?? STEP1:FOREACH cursor1 FOR SELECT gl_opun_cod, gl_acct_typ, gl_lg_no, gl_bal_dire_flg, gl_acct_face_bal INTO cod, typ, no, flg, bal FROM glacaaca ORDER BY gl_opun_cod, gl_acct_typ, gl_lg_no, gl_bal_dire_flg; -- 排序的意义等同于分组,并决定是INSERT还是UPDATE; -- 建议在排序之前针对要排序的列建立索引,有助于提高 效率; STEP2:IF flg=0 THEN -- 根据余额方向决定余额进行累计; dr_bal = bal; cr_bal = 0; -- 将帐户余额累加到借方余额 ELSE dr_bal = 0; cr_bal = bal; -- 将帐户余额累加到贷方余额 END IF STEP3:IF cod=p_cod AND typ=p_typ AND no=p_no THEN -- 与上条记录相同,UPDATE UPDATE gltottot SET (gl_dr_bal, gl_cr_bal)

文档评论(0)

dzzj200808 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档