我在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_1
和TYPE_IN_2
(第二和第四列)中ATTRIBUTE_IN_1
和ATTRIBUTE_IN_2
(第一和第三列)中相等的值。
当ATTRIBUTE_IN_1
和ATTRIBUTE_IN_2
具有相等的值,而TYPE_IN_1
和TYPE_IN_2
(第二和第四列)具有不相等的值时,我想查看结果。
对于结果示例,我想看看:
ATTRIBUTE_IN_1|TYPE_IN_1|ATTRIBUTE_IN_2 |TYPE_IN_2 |
_______________________________________________________
advance |String | advance |decimal(20,10) |
我可以在MS EXCEL中使用什么公式来解决此问题?
答案 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),"")
将它与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;