比较两个单元格并在不相等时显示它们

Comparing two cells and show both of them when it is not equal

我在 EXCEL 中有一个 table,看起来像这样:

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(第 2 和第 4 列)中 ATTRIBUTE_IN_1ATTRIBUTE_IN_2(第 1 和第 3 列)中的相等值。

在结果中我想查看值,当 ATTRIBUTE_IN_1ATTRIBUTE_IN_2 具有相等的值,但 TYPE_IN_1TYPE_IN_2(第 2 和第 4 列)具有不相等的值值。

对于结果中的示例,我希望看到:

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

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

Excel 不适合回答这类问题。你可以拼凑一些东西,也许沿着这些线(对于属性 1):

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

这将设置一个二维数组,其中行是属性 1,列是属性 2。将有冲突的数组元素设置为1,剩下的公式就是按row/column顺序取出对应的值。

对于类型 1:

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

对于类型 2:

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

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

.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;