例题描述和简单分析
Excel 数据有 2 个表格,两者格式相同,A 列都是逻辑主键,下面表格(称为表 1)的数据比上面表格(称为表 2)新。具体如下:
想要对比两个表格的不同:
(1)找到表2和表1的差异,即所有新增的数据,结果如下:
(2)找到所有删掉的数据,即
(3)找到所有修改(主键不变,其他列变化)的记录,即:
解法及简要说明
使用Excel插件SPL XLL
在空白单元格分别写入如下公式:
(1)找到表2和表1的差异,即所有新增的数据。
=spl("=[E@b(?2),E@b(?1)].merge@od(_1)",A1:B5,A9:B13)
如图:
(2)找到所有删掉的数据。
=spl("=[E@b(?1),E@b(?2)].merge@od(_1)",A1:B5,A9:B13)
如图:
(3)找到所有修改(主键不变,其他列变化)的记录。
=spl("=[[E@b(?2),E@b(?1)].merge@od(),[E@b(?2),E@b(?1)].merge@od(_1)].merge@od()",A1:B5,A9:B13)
如图:
简要说明
函数merge实现归并运算,@o表示对内存数据进行不排序归并,@d表示归并中计算差集。
通过比对第1列,对表2和表1进行差集运算,从而算出新增的数据。
同理,比对第1列,对表1和表2进行差集运算,算出删除的数据。
先通过比对整行,算出新增或修改的数据。再将该中间结果与第(1)步结果比对整行,算出修改的数据。