本文主要是介绍informix数据对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需求如下:
企业传送过来个人费用明细文件,每行数据按“|”分割:个人银行账号|客户姓名|单位月缴额|账户状态|
银行informix数据库表 booklist存储银行个人费用明细,booklist表主要字段是:cust_no,cust_name,mon_pay,state 对应于上面文件内容。
现需要进行核对明细,上述各字段皆不为空,账户状态有0-正常、1-封存,根据个人银行账号逐个比对单位月缴额和账户状态,最终打印出企业多、银行多、不一致和一致的结果。
要求使用链表,存储和核对需要打印的结果字段个人银行账号、客户姓名、单位月缴额、账户状态、对比结果。请写出设计流程和主要SQL代码。
方案:
1.数据导入到一张表中
2.利用MERGE INTO去计算匹配
代码实现:
1.命令行创建比对结果表并数据导入到informix:
CREATE TABLE bookListResult
(cust_no VARCHAR(40), cust_name VARCHAR(40), mon_pay FLOAT ,state int, isSync int,whoMore VARCHAR(40),
); load from /mydir/enterprise.dat delimiter '|'
insert into bookListResult;
2.数据匹配比对操作:
--是否一致 一致标示为1,否则标示为0,判断标准仅限于账户名称,账户状态和金额
MERGE INTO bookListResult blr
USING booklist bl
ON blr.cust_no=bl.cust_no and blr.state = bl.state and blr.mon_pay = bl.mon_pay
WHEN MATCHED THEN
UPDATE SET blr.isSync = 1,
WHEN NOT MATCHED THEN
UPDATE SET blr.isSync = 0;--是否一致 一致标示为1,否则标示为0
MERGE INTO bookListResult blr
USING booklist bl
ON blr.cust_no=bl.cust_no and blr.mon_pay > bl.mon_pay and blr.isSync = 0 and blr.state = bl.state
WHEN MATCHED THEN
UPDATE SET blr.whoMore = '企业多',
WHEN NOT MATCHED THEN
UPDATE SET blr.whoMore = '银行多';
3.直接遍历bookListResult打印结果信息
这篇关于informix数据对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!