大数据量情况下比较两张工作表中相同或不同的邮件号

iamlaosong文

有两个工作表,里面是邮件明细,每个都有20万条,要想提出两个表中重复的邮件号,怎么办好呢?

如果数据量小的话,可以用countif函数,也可以用vlookup函数,可是这么大数量的数据,用这个函数,电脑很快就死翘翘了,仔细考虑,想到用SQL语句完成这个工作,试了一下,时间不长,结果就出来了。

假定数据在文件“比较.xlsx”中的sheet1和sheet2 工作表中,步骤如下:

1、随便新建一个Excel文件,建立一个对本文件某工作表的查询,因为要重写SQL语句,所以随便建立一个就行了,建立查询的方法见:SQL在Excel中的应用方法 或者 怎样提取Excel工作表中排名前几名的名称和数据中相关描述。

2、建立过程中,将SQL语句改为如下,确定后返回的就是两表中都存在的邮件号(重复邮件):

select a.邮件号 ,count(*) as 数量 from [G:\临时桌面\国际运费\比较.xlsx].[sheet1$] a, [G:\临时桌面\国际运费\比较.xlsx].[sheet2$] b where a.邮件号 = b.邮件号 group by a.邮件号

3、如果还有类似工作,只要将邮件号拷贝到“比较.xlsx”中sheet1和sheet2中,然后右击本文件查询结果中任一单元格,点击弹出菜单中的刷新既可,如下图:


4、为了增强适应性,上面文件的路径也可以不写,只有这些文件放在一个目录下即可:

select a.邮件号 from [比较.xlsx].[sheet1$] a, [比较.xlsx].[sheet2$] b where a.邮件号 = b.邮件号

注:上面的写法本机上没有问题,但文件拷贝给同事后发现并不能刷新数据,提示创建文件失败,不知道创建什么文件。他的环境是2010,我的是2007,不知道是不是版本导致这个问题。在同事的机器上重建查询并复制SQL语句,SQL语句中的文件名必须为全路径文件名才行。

5、如果两张表不在一个文件中也可以,只要写不同文文件名就行了:

select a.邮件号 from [G:\临时桌面\国际运费\比较1.xlsx].[sheet1$] a, [G:\临时桌面\国际运费\比较2.xlsx].[sheet1$] b where a.邮件号 = b.邮件号

真实案例:

select a.邮件号 from [G:\临时桌面\国际运费\国际邮件计算表-9月.xlsx].[E邮宝$] a, [G:\临时桌面\国际运费\国际邮件计算表-10月.xlsx].[E邮宝$] b where a.邮件号 = b.邮件号

6、如果要找出其中一个表中不重复的邮件号,可以用左连接或右连接实现:

select a.邮件号,b.邮件号 from [比较.xlsx].[sheet1$] a left join (select 邮件号 from [比较.xlsx].[sheet2$]) b on a.邮件号 = b.邮件号 where b.邮件号 is null

或者

select a.邮件号,b.邮件号 from [比较.xlsx].[sheet1$] a right join (select 邮件号 from [比较.xlsx].[sheet2$]) b on a.邮件号 = b.邮件号 where a.邮件号 is null

7、除了用连接的方式,也可以用子查询的方法,SQL如下:

查找重复的:

select a.邮件号 from [比较.xlsx].[sheet1$] a where a.邮件号 in (select 邮件号 from [比较.xlsx].[sheet2$]) 

查找不重复的:

select a.邮件号 from [比较.xlsx].[sheet1$] a where a.邮件号 not in (select 邮件号 from [比较.xlsx].[sheet2$]) 

8、如果查出本表中的重复项,SQL如下:
select a.邮件号, count(*) as 数量 from [比较.xlsx].[sheet1$] a group by a.邮件号  having count(*)>1
select a.邮件号, count(*) as 数量 from [比较.xlsx].[sheet2$] a group by a.邮件号  having count(*)>1



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值