比较两个像元并在不相等时显示两个像元

时间:2018-12-18 14:38:16

标签: excel ms-office

我在EXCEL中有一个看起来像这样的表:

ATTRIBUTE_IN_1|TYPE_IN_1|ATTRIBUTE_IN_2 |TYPE_IN_2      |
________________________________________________________
advance       |String   | accounts      |decimal(20,10) |
education     |String   | Job_category  |String         |
date of birth |date     | advance       |decimal(20,10) |

我想比较TYPE_IN_1TYPE_IN_2(第二和第四列)中ATTRIBUTE_IN_1ATTRIBUTE_IN_2(第一和第三列)中相等的值。

ATTRIBUTE_IN_1ATTRIBUTE_IN_2具有相等的值,而TYPE_IN_1TYPE_IN_2(第二和第四列)具有不相等的值时,我想查看结果。

对于结果示例,我想看看:

ATTRIBUTE_IN_1|TYPE_IN_1|ATTRIBUTE_IN_2 |TYPE_IN_2      |
_______________________________________________________
advance       |String   | advance       |decimal(20,10) |

我可以在MS EXCEL中使用什么公式来解决此问题?

1 个答案:

答案 0 :(得分:1)

Excel并非真的适合此类问题。您可以按照以下方式将某些东西拼凑在一起(对于属性1):

=IFERROR(INDEX($A$2:$A$10,INT(SMALL(IF(($A$2:$A$10=TRANSPOSE($C$2:$C$10))*($B$2:$B$10<>TRANSPOSE($D$2:$D$10)),
ROWS($A$2:$A$10)*(ROW($A$2:$A$10)-ROW($A$2))+TRANSPOSE(ROW($A$2:$A$10)-ROW($A$2))),ROW(1:1))/ROWS($A$2:$A$10))+1),"")

这将设置一个2D数组,其中行是属性1的列,列是属性2的列。发生冲突的数组元素设置为1。其余公式将按行/列顺序获取相应的值。

对于类型1:

=IFERROR(INDEX($B$2:$B$10,INT(SMALL(IF(($A$2:$A$10=TRANSPOSE($C$2:$C$10))*($B$2:$B$10<>TRANSPOSE($D$2:$D$10)),
ROWS($A$2:$A$10)*(ROW($A$2:$A$10)-ROW($A$2))+TRANSPOSE(ROW($A$2:$A$10)-ROW($A$2))),ROW(1:1))/ROWS($A$2:$A$10))+1),"")

对于类型2:

=IFERROR(INDEX($D$2:$D$10,MOD(SMALL(IF(($A$2:$A$10=TRANSPOSE($C$2:$C$10))*($B$2:$B$10<>TRANSPOSE($D$2:$D$10)),
ROWS($A$2:$A$10)*(ROW($A$2:$A$10)-ROW($A$2))+TRANSPOSE(ROW($A$2:$A$10)-ROW($A$2))),ROW(1:1)),ROWS($A$2:$A$10))+1),"")

enter image description here

将它与SQL做相同的事情进行比较很有趣,例如在SQLite中:

.mode csv
.import book2.csv test1
select a.attribute_in_1,a.type_in_1,b.type_in_2
from
test1 a inner join test1 b
on a.attribute_in_1=b.attribute_in_2 and a.type_in_1<>b.type_in_2;

enter image description here