国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

在ORACLE中利用視圖組織矩陣報表

2024-08-29 13:38:46
字體:
供稿:網(wǎng)友

    筆者曾參加過日照港物資MIS和生產(chǎn)MIS的開發(fā)工作。在實際開發(fā)過程中,利用Oracle前端開發(fā)工具之一Oracle*Reports做過許多矩陣報表。所謂矩陣報表是由一個列記錄值、一個行記錄值和一個cell組,這組內(nèi)的每一個格包含了行與列相關(guān)的數(shù)據(jù)。 筆者認(rèn)為矩陣報表實現(xiàn)的要害在于組織數(shù)據(jù)。
  
  一、利用視圖組織矩陣報表:
  1、本例假設(shè)有一物資資金統(tǒng)計表,其格式如下:
  
  項目 類別 期初 庫存 本期 增加 本期減少 一公司 二公司 三公司 ... 期末庫存
  黑色金屬
  有色金屬
  五金制品
  非金屬建材
  橡塑
  工具
  勞保
  雜品
  機電設(shè)備
  
  該表橫向顯示“期初庫存”、“本期增加”、“本期減少及消耗去向”、“期末庫存”;縱向顯示物資類別,是一矩陣報表。與該報表有關(guān)的數(shù)據(jù)基表有以下幾個:
  
  .RQ:存放統(tǒng)計日期,其數(shù)據(jù)結(jié)構(gòu)為:
  字段名 含義 長度 類型 備注
  YF 統(tǒng)計月份 6 CHAR 格式:YYYYMM
  
  .LBXX:存放物資類別信息,其數(shù)據(jù)結(jié)構(gòu)為:
  字段名 含義 長度 類型 備注
  LBDM 類別代碼 2 CHAR 取值范圍01~09
  LBMC 類別名稱 20 CHAR
  
  .DWDM:存放領(lǐng)料單位代碼,其數(shù)據(jù)結(jié)構(gòu)為:
  字段名 含義 長度 類型 備注
  DWDM 單位代碼 4 CHAR 取值范圍0101~0199
  DWMC 單位名稱 20 CHAR
  
  .YDKCXX:存放庫存月度備份信息,其數(shù)據(jù)結(jié)構(gòu)如下:
  字段名 含義 長度 類型
  YDH 月份 6 CHAR
  LBDM 類別代碼 2 CHAR
  KCJE 月底庫存 12,2 NUMBER
  YRJE 月入金額 12,2 NUMBER
  YCJE 月出金額 12,2 NUMBER
  
  .XHQX:存放資金消耗去向信息,其數(shù)據(jù)結(jié)構(gòu)如下:
  字段名 含義 長度 類型 備注
  RQ 領(lǐng)料日期 10 DATE
  WZDM 物資代碼 9 CHAR 前兩位代表物資 所屬大類
  DWDM 單位代碼 4 CHAR
  XHJE 消耗金額 12,2 NUMBER
  
  2、利用視圖組織矩陣報表的過程:
  
  CREATE VIEW V_ZHBB1
  AS SELECT LBDM,(KCJE-YRJE+YCJE)"QCJE" FROM YDKCXX,RQ WHERE YDH=YF;
  
  CREATE VIEW V_ZHBB2
  AS SELECT LBDM,YRJE"BQZJ" FROM YDKCXX,RQ WHERE YDH=YF;
  
  CREATE VIEW V_ZHBB3
  AS SELECT LBDM,YCJE"BQJS" FROM YDKCXX,RQ WHERE YDH=YF;
  
  CREATE VIEW V_ZHBB4
  AS SELECT LBDM,KCJE"QMJE" FROM YDKCXX,RQ WHERE YDH=YF;
  
  CREATE VIEW V_ZHBB5
  AS SELECT DWDM,SUBSTR(WZDM,1,2)"LBDM",SUM(XHJE)"LLJE"
  FROM XHQX,RQ
  WHERE TO_CHAR(RQ,’YYYYMM’)=YF
  GROUP BY DWDM,SUBSTR(WZDM,1,2);
  
  CREATE VIEW V_ZHBB AS
  SELECT 0.1"DWDM",'期初金額'"DWMC",V_ZHBB1.LBDM,LBMC,SUM(QCJE)"JE"
  FROM V_ZHBB1,LBXX WHERE V_ZHBB1.LBDM=LBXX.LBDM
  GROUP BY V_ZHBB1.LBDM,LBMC
  UNION
  SELECT 0.2"DWDM",'本期增加'"DWMC",V_ZHBB2.LBDM,LBMC,SUM(BQZJ)"JE"
  FROM V_ZHBB2,LBXX WHERE V_ZHBB2.LBDM=LBXX.LBDM
  GROUP BY V_ZHBB2.LBDM,LBMC
  UNION
  SELECT 0.3"DWDM",'本期減少'"DWMC",V_ZHBB3.LBDM,LBMC,SUM(BQJS)"JE"
  FROM V_ZHBB3,LBXX WHERE V_ZHBB3.LBDM=LBXX.LBDM
  GROUP BY V_ZHBB3.LBDM,LBMC
  UNION
  SELECT TO_NUMBER(V_ZHBB5.DWDM)"DWDM",DWMC,V_ZHBB5.LBDM,LBMC,LLJE"JE"
  FROM V_ZHBB5,DWDM,LBXX
  WHERE V_ZHBB5.DWDM=DWDM.DWDM AND V_ZHBB5.LBDM=LBXX.LBDM
  UNION
  SELECT 200"DWDM",'期末金額'"DWMC",V_ZHBB4.LBDM,LBMC,SUM(QMJE)"JE"
  FROM V_ZHBB4,LBXX WHERE V_ZHBB4.LBDM=LBXX.LBDM
  GROUP BY V_ZHBB4.LBDM,LBMC;
  至此該矩陣報表的數(shù)據(jù)組織完畢,建立矩陣報表查詢時直接引用視圖V_ZHBB即可。

  
  3、需要注重的問題:
  
  (1) 由于UNION操作當(dāng)有兩行完全相同的記錄時,只取其中的一行,這樣就造成匯總數(shù)據(jù)不準(zhǔn)確,所以設(shè)計視圖時必須避免這種情況的發(fā)生。其方法是:在同一查詢中,可加入主鍵字段加以區(qū)分;在不同查詢中,可加入一個不同值的常量來區(qū)分。
  (2) 當(dāng)所建視圖的級數(shù)或UNION次數(shù)太多時,系統(tǒng)會出現(xiàn)“打開游標(biāo)數(shù)太多”的錯誤。這時就需要用一個中間表將某一級視圖數(shù)據(jù)轉(zhuǎn)儲一下,接下來所建視圖再引用中間表的數(shù)據(jù)。
  (3) 在每次生成報表之前,必須先刪除表RQ中的原有日期,將新的統(tǒng)計日期追加進(jìn)去并提交,再刪除中間表的內(nèi)容,然后將需轉(zhuǎn)儲的視圖數(shù)據(jù)追加進(jìn)去并提交。
  2、 結(jié)論:
  利用視圖組織矩陣報表,其思路是將報表中的列利用視圖旋轉(zhuǎn)成行,然后再用并操作(UNION)將這些行連接起來。對于列值來自兩個以上的數(shù)據(jù)表或列數(shù)不確定(如上例中每月資金消耗去向)的報表,這種方法非常有效,并且在維護報表時不需要修改程序。
  以上只是一個比較簡單的例子.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南城县| 遵化市| 青铜峡市| 泸州市| 兴化市| 平和县| 奉化市| 郯城县| 海口市| 孟村| 澄迈县| 图木舒克市| 嘉祥县| 霍林郭勒市| 西城区| 郎溪县| 会泽县| 龙陵县| 横山县| 高阳县| 莎车县| 襄垣县| 威宁| 新乐市| 岳普湖县| 浦城县| 蒙自县| 上虞市| 屏边| 金坛市| 个旧市| 酒泉市| 玉环县| 拜城县| 彰武县| 祁东县| 株洲县| 祁阳县| 法库县| 隆化县| 庆城县|