关于银行报表开发简单思路解析(MYSQL存储过程)

关于银行报表开发简单思路解析(MYSQL存储过程)

需求分析:
在这里插入图片描述
该表为简易银行报表模板,一般为行列模式。

  • 基础表设计:
    1.根据业务种类建立对应业务的维度表,一般为客户维度表,产品维度表,资产维度表等
    2.根据字段一、字段二等行项目,来处理加工出来一张事实表。也可以简单的理解为将最终报表中的处理逻辑单独做一张事实表。
    3.根据报表字头的标题做一张码表,每一行赋予一个Index_No字段。并且按照递增排列。
    4.一般都有一张时间维度表,这个都是默认建立的,可以直接用。作用就是用来截取日期段来循环插入数据。
  • 处理逻辑:
    1.根据报表样式中的列字段按照业务模式为指标建立若干张张临时表,表中的数据为按报表模板中的字段一等等的select结果。
    2.根据临时表与码表关联select出报表样式中的所有数据(不含合计)
    3.插入合计数据。
    4.转换最终金额为万元。
  • 伪代码:
    创建存储过程,先按照思路做出两张临时表,而后把每一行的数据select出来,插入到最终报表中,接下来就把合计select出来插入到最终报表,最后把数据单位格式更新。
  • 代码实现:
CREATE DEFINER=`dap_app`@`%`PROCEDURE `dap_app` . `P_F_RPT_G0602_ASSET_LIAB_SITUAT_SUB`
( 	IN I_BEGIN_DATE INT, 
	IN I_END_DATE INT 
)
/*
--=========================================================================-
--对象编号:
--对象名称:
--对象表示:
--创建人:
--创建日期:
--功能描述:
--处理逻辑:
--修改说明:
--未确定问题:
--待优化问题:
--=========================================================================-
*/
begin 
	declare v_oc_date,v_m_begin_date int;
	declare done int default 0;
	
	-- 游标循环处理输出入参数日期区间的数据
	declare cur cursor for 
		select oc_date from dim_date
			where oc_date between i_begin_date and i_end_date
			order by oc_date asc;
	--将变量done设置为1,用于循环中判断是否交结束
	declare continue hadnler for not found set done = 1;
	
	--打开游标
	open cur;
	dateloop:loop
	--游标向前走一步,取出一条记录放在变量v_oc_date中
		fetch cur into v_oc_date;
		if done=1 then
			leave dateloop;
		end if;
	--获取月初数据
	select min(oc_date)into v_m_begin_date
		from dim_date
	where oc_month = v_oc_date;
	
	--删除输入日期表数据
	delete from F_RPT_G0602_ASSET_LIAB_SITUAT_SUB
		where data_dt = v_oc_date
		
	commit;
		
	--插入表数据
	insert into F_RPT_G0602_ASSET_LIAB_SITUAT_SUB
		(字段1,字段2,字段3,字段4)
	with asdf as (
	*** as puc1
	*** as puc2
	*** as puc3
	***),
	jubs as (
	*** as puc1
	*** as puc2
	*** as puc3
	***)
-- 行内容1
	select 
		v_oc_date as data_dt,a.标题1,a.标题2,a.标题3,
		bb.puc1,  	-- 此处对应临时表的对应数据 > 进而对应最终报表的第一行数据
		cc.puc1		-- 此处对应临时表的对应数据 > 进而对应最终报表的第一行数据
	from 码表 a
	left join asdf bb on 1=1
	left join jubs cc on 1=1
	where Index_no = 1 -- 此处为取字头的逻辑 > 进而对应最终报表的第一行数据
union all
-- 行内容2
		select 
		v_oc_date as data_dt,a.标题1,a.标题2,a.标题3,
		bb.puc2,
		cc.puc2
	from 码表 a
	left join asdf bb on 1=1
	left join jubs cc on 1=1
	where Index_no = 2 -- 此处为取字头的逻辑
	
	...
	
	commit;
	
-- 生成合计
	insert into 表名
	(字段名
	字段名)
	select 
		* as Index_no,
		'' as categ_level1_1,
		'' as categ_level1_2,
		'' as categ_level1_3,
		字段名,
		字段名
	from 最终表
	where Index_no = ***    -- 根据Index_no来进行合计
	and 日期限制

	commit;
	
--将相关列转换单位
	update 
	set 字段名 = 字段名+计算式
	where 日期限制
	
end loop dateloop
close loop

end 
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值