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)