用Select union实现多表数据合并,简化公式设计
更新日期:2020年2月3日
客户需求:在用勤哲excel服务器设计开发系统的过程中,我们经常需要把多个模板的数据合并到一起供其他模板调用。比如财务的收款和付款业务,我们通常都会分别做一个收款单和一个付款单,两个模板数据汇总一起形成收付款流水账。比如出入库业务,也会做个出库单和入库单,两个模板的数据汇总形成出入库台账。比如贸易公司合同管理会有内销合同,外销合同,两个模板数据汇总形成合同汇总表。以上这些情况在我们设计系统的时候是普遍存在的。
实现方法:遇到这些情况通常有三种方法来解决。
-
1、采用数据表映射,把多个模板的字段定义映射到一个数据表上。对应的视频教程:http://www.qinzheapp.com/cn/tutorial-2015/t-20-04.html。这种方式需要前期就要做好设计规划,如果前期没做映射,后期想改只能从新设计模板。
- 2、采用回写公式补充明细的方式,把多个模板的数据回写到一个模板上去。这种方式太复杂并且不可靠。要考虑单据修改,删除等等情况。
- 3、设计一个视图,用Select union实现多表数据合并。这种方式简单易行,可靠稳定,但是需要用户会写sql语句。
在这里,我们就以收款单和付款单为例子给大家讲讲如何用sql语句Select union实现多表数据合并。我们已经做好两个模版,分别为【收款单和付款单】,并录入了单号为SK-2002002和FK-2002003两个单据,合并到【收付款 台帐的查询】里,如下图:
第一步,先准备好两个模板,分别为收款单和付款单,表样和数据项定义如下图:
第二步,开启允许用户直接写sql视图定义选项。用管理员admin账号登陆客户端,点系统管理,点选项,勾选【允许用户直接写sql视图定义】后确定
第三步,点设计,点数据管理,点视图,点新建按钮
第四步,在视图名称里输入【收付款】,定义方式里选择【直接输入sql语句】,在下放空白处写如下语句:
select 付款单号, 客户名称, 客户编号, 付款日期, 付款方式, 付款金额, 录入人, 录入时间 from 付款单
union
select 收款单号, 客户名称, 客户编号, 收款日期, 收款方式, 收款金额, 录入人, 录入时间 from 收款单
这个语句实际上是由两个select语句通过union组合在一起的,select后面跟着的是你要取的模板的字段名称,from后面跟着的是模板对应的数据表名,注意不是模板名称。另外字段的顺序要注意一一对应,不要错了顺序。注意空格,逗号都是英文符号,不要在中文状态下输入这些符号。
第五步,右键点击新建的视图,选执行,预览执行效果,自行核对数据后,表间公式、数据规范、查询等就可以引用这个视图的数据了。麻烦的问题是不是很简单就搞定了!!!
第六步,语句的优化
我们仔细观察这个执行的结果,会发现第一:列名是以付款单为准的,第二:两行数据不能快速看出来哪个是收款,哪个是付款。我们用【as】 优化修改一下sql语句,最终语句如下:
select '付款单' as 单据类型,付款单号 as 单号, 客户名称, 客户编号, 付款日期 as 收付日期, 付款方式 as 收付方式, 付款金额 as 金额, 录入人, 录入时间 from 付款单
union
select '收款单' as 单据类型,收款单号 as 单号, 客户名称, 客户编号, 收款日期 as 收付日期, 收款方式 as 收付方式, 收款金额 as 金额, 录入人, 录入时间 from 收款单
看看执行结果是不是看起来更清晰明了。
第七步:设计里新建一个查询,验证效果。如下图:
到此所有设计全部完成,完美达到多模版数据合并的效果。