比较两个单元格并在不相等时显示它们
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_1
和 TYPE_IN_2
(第 2 和第 4 列)中 ATTRIBUTE_IN_1
和 ATTRIBUTE_IN_2
(第 1 和第 3 列)中的相等值。
在结果中我想查看值,当 ATTRIBUTE_IN_1
和 ATTRIBUTE_IN_2
具有相等的值,但 TYPE_IN_1
和 TYPE_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;
我在 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_1
和 TYPE_IN_2
(第 2 和第 4 列)中 ATTRIBUTE_IN_1
和 ATTRIBUTE_IN_2
(第 1 和第 3 列)中的相等值。
在结果中我想查看值,当 ATTRIBUTE_IN_1
和 ATTRIBUTE_IN_2
具有相等的值,但 TYPE_IN_1
和 TYPE_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;