需求如下:
企业传送过来个人费用明细文件,每行数据按“|”分割:个人银行账号|客户姓名|单位月缴额|账户状态|
银行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 blrUSING booklist blON blr.cust_no=bl.cust_no and blr.state = bl.state and blr.mon_pay = bl.mon_payWHEN MATCHED THENUPDATE SET blr.isSync = 1,WHEN NOT MATCHED THENUPDATE SET blr.isSync = 0;--是否一致 一致标示为1,否则标示为0MERGE INTO bookListResult blrUSING booklist blON blr.cust_no=bl.cust_no and blr.mon_pay > bl.mon_pay and blr.isSync = 0 and blr.state = bl.stateWHEN MATCHED THENUPDATE SET blr.whoMore = '企业多',WHEN NOT MATCHED THENUPDATE SET blr.whoMore = '银行多';
3.直接遍历bookListResult打印结果信息