跨表数据比对分析(三个工作表联合查询的方法)
大家好,今日继续讲解VBA数据库解决方案,今日的内容是第70讲: 数据查询中,三个工作表联合查询的方法。在各种查询中,内连接,左外连接,右外连接等等,这些方法大家在工作中要多加利用,并且灵活利用,利用多了,知识就变成自己的了。今日我们讲解的是三个工作表的联合查询,也就是说三个工作表的数据要一次查询。我们还是看下面的实例讲解。
实例,我们有三个工作表,工作表"数据3",工作表"数据7",工作表"数据8"数据如下:
我们在上面的三个工作表中以员工编号为线索,要返回三个表的联合表格,同时字段要全字段,员工编号,姓名,年龄,民族,植树数量,成活数量,这个代码要如何写呢?下面看我的代码:
Sub mynzRecords_70() '第70讲 三表查询SQL
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("70").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
strSQL = "select A.员工编号,B.姓名,B.年龄,C.民族,A.植树数量,A.成活数量" _
& " from [数据3$] as A,[数据7$] as B,[数据8$]" _
& " as C where A.员工编号=B.员工编号 and B.员工编号=C.员工编号 group by " _
& "A.员工编号,B.姓名,B.年龄,C.民族,A.植树数量,A.成活数量"
'打开记录集
rsADO.Open strSQL, cnADO, 1, 3
For i = 1 To rsADO.Fields.Count
Cells(1, i) = rsADO.Fields(i - 1).Name
Next
'提出数据
Range("a2").CopyFromRecordset rsADO
'释放内存
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
代码解读:
1 上述代码就是要联合数据3工作表、数据7工作表、数据8工作表,通过A.员工编号=B.员工编号 and B.员工编号=C.员工编号量实现三表联合查询
2 strSQL = "select A.员工编号,B.姓名,B.年龄,C.民族,A.植树数量,A.成活数量" _
& " from [数据3$] as A,[数据7$] as B,[数据8$]" _
& " as C where A.员工编号=B.员工编号 and B.员工编号=C.员工编号 group by " _
& "A.员工编号,B.姓名,B.年龄,C.民族,A.植树数量,A.成活数量"
上述SQL 语句就是实现三表联合查询的代码。
3 上述查询中需要注意的是后面的group by 语句的写法,大家在复制代码的时候要注意格式,不可以写错。
下面看代码的运行:
今日内容回向:
1 如何实现三表联合查询?
2 三表联合查询中是通过什么来实现的?
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com