应用场景:
数据仓库上游源系统的数据库表变更,现在需要拆分一部分数据出来,单独放到一张新表中。假设原表为A,新表为B,B表和A表结构大部分一样,只有字段的前缀不同,那么我们如何找出到底有哪些字段不同呢?显然,如果A表只有10个字段,B表少了2个字段,那么我们很容易找出来,用眼睛看就行了。如果A表有200个字段,B表有195个字段,那怎么办呢?
思路:现在,现在用眼睛看是不行的。我们可以这样做,通过主键字段来进行查找(主键先进行预处理,截取前缀后面的部分),使用VLOOKUP来找出每个字段的不同。那么,VLOOKUP如何使用呢?这就触及到我的知识盲区了。作为一个几乎近10年不用Excel的程序猿,作为一个8年的JAVA程序猿,算了不吐槽了..... 翻一翻我自己的技术栈,劳资现在竟然在搞数据仓库,你能信?
基础一:利用VLOOKUP函数返回班级名称
现在我举个栗子:利用VLOOKUP函数返回班级名称。
假设红色方框中部分(I1~I12)原先无值,我们如何批量的从左侧部分(A1~D12)通过学号来补全这部分呢?
可以这样做:先用VLOOKUP求出I1的值,然后往下拖动复制,这样就能补全全部的值了。那么,如何先补全I1的值呢?
1. 选中I1,输入=VLOOKUP,Excel会自动提示,如图所示:
2. VLOOKUP参数:lookup_value 表示用哪部分查找、table_array表示查找的区域(我们可以理解为一个二维数组)、
col_index_num要查找的信息在二维数组水平偏移量(就是在这个数组中那一列),最后一列可以自己看提示(近似还是精确)
3.该例子中,最后的输入是:
猛一看,好像是对的,但是你向下拖动复制的时候,看看结果:
看一看,是不是有很多没有找到?原因在哪?我们看看I5的函数表达式,A5:D16?什么鬼?是不是Excel太自作聪明了.... 看来我们要给它限定死区域才行。看看这样写:
这次我们用了绝对地址,用$符给限定死,F5是可以根据选中行的不同自动累加,但是$A$1:$D$12就不会再变了,我们会一直在这个区域查找。所以,现在用VLOOKUP找到I1后,我们直接往下拖动复制就可以了。
基础二:利用vlookup返回多列数据
如果我们现在只有学号,我要补全姓名、性别、班级呢?
聪明的你可能会觉得这很简单,我重复写3次vlookup不就行了吗?恩,你很聪明,那么如果我有100个属性都要补全你,所以你准备写100次?有没有觉得自己智障?
如何才能不做智障?顺便地,我们把题目再复杂化一下:
我们看看规律VLOOKUP($F14,$B$1:$E$12,COLUMN(C1)-1,FALSE)。
column()函数返回列数,但是函数要的不是这个,要的是在二维数组中水平偏移量,所以减1才是偏移量(第二列);
剩下的应该不用说了吧,自己体会~~~
展望:
下一次介绍Excel中的字符串截取。