前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA与数据库——获取第一条查找记录

VBA与数据库——获取第一条查找记录

作者头像
xyj
发布2021-10-08 11:41:44
1.8K0
发布2021-10-08 11:41:44
举报
文章被收录于专栏:VBA 学习

简化程序编写-查找里,已经介绍过了查找数据的方法,里面演示的数据非常简单,数据源是没有重复的。

如果数据源里存在重复的时候,结果将会是这样的:

这个和使用Excel的习惯是不一致的,一般在Excel里使用VLookup查找的话,取的会是第一条满足条件的数据;如果是使用VBA字典的方式,获取的是最后放入字典的数据。

也就是只会出现一条记录,很多时候在Excle里处理数据的习惯就是想得到一条结果。

如果要满足这样的情况,使用ADO来处理的话,就要使用sql语句先对数据源做一下处理,先把重复的情况去除掉,再使用原来的sql语句进行查找:

代码语言:javascript
复制
Sub ADOSearchFirst()
    Dim AdoConn As Object
    Set AdoConn = VBA.CreateObject("ADODB.Connection")
    
    '打开数据库
    AdoConn.Open "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.fullname & ";Extended Properties=""Excel 12.0;HDR=YES"";"
    Range("G2").CopyFromRecordset AdoConn.Execute("select A.项目,B.数据 from [Sheet1$A1:A6] A Left Join (select 项目,First(数据) as 数据 from [Sheet1$D1:E7] group by 项目) B On A.项目=B.项目", , 1)
    
    AdoConn.Close
    Set AdoConn = Nothing
End Sub

改造一下sql语句可以,通过这条语句:

代码语言:javascript
复制
select 项目,First(数据) as 数据 from [Sheet1$D1:E7] group by 项目

获取到一个没有重复的数据源,然后再进行查找。

这里主要用到group by分组,获取First第一个出现的数据,将这条语句放在括号里,相当于括号里的就是一张新的表格,有点类似Excel里公式的嵌套使用。

同时要注意的是,First这个函数不是每一种数据库都可以支持的。

可以单独的运行下这条语句,看下出来的结果就能够更容易理解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档