合併報表為了節省磁碟空間,服務端對專案資料儲存採用了橫表的方式,取數上有些複雜,特說明和示例如下:
比如要取2023年8月份、月報、幣別編碼為「001」的人民幣、公司編碼為「c01」的個別表資產負債表中,編碼為「1001」的專案的本期發生數。
and b.fnumber='1001'
其中a.ftablename是編碼為「1001」的專案的資料所在的表名(比如為t_csl_itemdataentry001),a.ffieldname是欄位名(比如為f1),a.ftablename所得的表是程式動態生成的,目前是乙個表300個字段,當有301個專案時就會有兩個表,601個專案時就有三個表,依此類推,表名分別為:t_csl_itemdataentry001、t_csl_itemdataentry002、t_csl_itemdataentry003等等。
查詢專案資料的sql如下:
select sum(d1.f1) from t_csl_itemdata h,t_csl_itemdataentry d,t_csl_itemdataentry001 d1,t_org_baseunit company,t_bd_currency cy
where h.fid=d.fitemdataid and d.fid=d1.fid and h.fcompanyid=company.fid and h.fcurrencyid=cy.fid
and company.fnumber='001' --公司
and cy.fnumber='c01' --幣別
and h.fperiodtype=3 --月報
and h.fdatasource=1 --個別報表
and h.fcommitstatus=3 --已經集團確認的
and d.fdataelement=2 --本期發生數
and d.fvaluetype=1 --金額
and d.fyear=2006 --2023年
and d.fperiod=8 --8月
合併報表優化記錄
這是早期的合併報表優化記錄,內容不多,保留下來備查。一.查詢源報表是否存在 select 1 where exists select from t csl cslreport where fsourcerptid 4583062d 010a 1000 e002 63bbc0a8ef02b712ea2...