⼀个数据表连接两个数据源_LEFTJOIN同时实现连接两个不
同SQL的⽅法
⼤家好,今⽇继续讲解VBA数据库解决⽅案,今⽇的内容是第68讲:左外连接LEFT JOIN实现同时连接两个不同SQL的⽅法。在数据库解决⽅案中,我模拟了很多的情况,在其中结合多种连接模式,在实现解决问题的前提下,可以应⽤的连接有多种,⼤家要根据⾃⼰的理解和掌握的程度,选择⾃⼰熟悉的连接⽅式。⽐如左外连接和右外连接有时候是可以互换的。
我们今⽇讲解的内容是应⽤于左外连接LEFT JOIN语句实现同时连接两个不同的SQL的⽅法,在左外连接查询前要先在数据源中实现排重。我们举的实例和上⼀讲类似,为了看到左连接的特点,我在"数据4"的⼯作表中增加了⼏组数据。
实例,某策划公司团队中对于策划项⽬的报价,在外联部门报价是:
同时后勤部门的报价如下:
报价中含有对每个项⽬组成中类别的占⽤车辆及需要的⼯具套数和单价。
当收到上述报价后,我们要根据内容整理出总的报价,总报价中不必关⼼其中⼩类别,我们要得出的只是项⽬,总⼈数,总价格,出动车辆,⼯具总套数,⼯具总价格的字段汇总。
思路:对于两个数据表先分别进⾏数据的汇总,然后再⽤左外连接同时连接这两个汇总的数据,就可以得到我们的最终结果了。由于我这讲的内容侧重关⼼的是数据源"数据4",要把这个数据资料放在左表,然后建⽴⼀个左外连接。实现我们的要求,
下⾯看我的代码:
Sub mynzRecords_68() '第68讲 左外连接left join ON 连接两个SQL
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("68").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
'建⽴SQL1 连接数据源,汇总项⽬
strSQL1 = "select 项⽬,SUM(⼈数) AS 总⼈数,SUM(价格) AS 总价格 from [数据4$] group by 项⽬"
多表left join'建⽴SQL2 连接数据源,汇总项⽬
strSQL2 = "select 项⽬,SUM(车辆) AS 出动车辆,SUM(⼯具套数) AS ⼯具总套数,SUM(⼯具套数*⼯具单价) AS " _
& "⼯具总价格 from [数据5$] group by 项⽬"
'建⽴SQL 连接之前建⽴的两个SQL语句
strSQL = "Select a.项⽬,a.总⼈数,a.总价格,b.出动车辆,b.⼯具总套数,b.⼯具总价格 From (" _
& strSQL1 & ") a left Join (" & strSQL2 & ") b " _
& "ON a.项⽬=b.项⽬ GROUP BY a.项⽬,a.总⼈数,a.总价格,b.出动车辆,b.⼯具总套数,b.⼯具总价格"
'打开记录集
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 上述代码应⽤于侧重于左表,返回左表各个字段的汇总表格,当右表中没有数据时返回null,对于左右表,是在左外连接前,⽤SQL建⽴的汇总表格。
2 '建⽴SQL1 连接数据源,汇总项⽬
strSQL1 = "select 项⽬,SUM(⼈数) AS 总⼈数,SUM(价格) AS 总价格 from [数据4$] group by 项⽬"
上述SQL语句实现了数据源[数据4$]的数据汇总。
3 '建⽴SQL2 连接数据源,汇总项⽬
strSQL2 = "select 项⽬,SUM(车辆) AS 出动车辆,SUM(⼯具套数) AS ⼯具总套数,SUM(⼯具套数*⼯具单价) AS " _
& "⼯具总价格 from [数据5$] group by 项⽬"
上述SQL语句实现了数据源[数据5$]的数据汇总。
4 '建⽴SQL 连接之前建⽴的两个SQL语句
strSQL = "Select a.项⽬,a.总⼈数,a.总价格,b.出动车辆,b.⼯具总套数,b.⼯具总价格 From (" _
& strSQL1 & ") a left Join (" & strSQL2 & ") b " _
& "ON a.项⽬=b.项⽬ GROUP BY a.项⽬,a.总⼈数,a.总价格,b.出动车辆,b.⼯具总套数,b.⼯具总价格"
上述SQL语句实现了数据源strSQL1和数据源strSQL2的左连接。下⾯我们看代码的运⾏情况:
今⽇内容回向:
1 左外连接是如何实现连接两个SQL语句的?
2 上述⽅案⽤于什么情况呢?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论