网站首页 > 基础教程 正文
大家好,今日继续讲解VBA数据库解决方案,今日的内容是第69讲:应用于右外连接RIGHT JOIN实现同时连接两个不同的SQL的方法。这讲的内容用左连接也可以实现,本讲的目的是介绍右连接中连接SQL的方法。由于每个人的喜好不同,可以根据自己的情况随意的选择,并结合自己的工作,采取不同的手段达到相同的目的。
我们仍是以上一讲的内容为实例,某策划公司团队中对于策划项目的报价,在外联部门报价是:
同时后勤部门的报价如下:
当收到上述报价后,我们要根据内容整理出总的报价,总报价中不必关心其中小类别的报价,我们要得出的只是项目,总人数,总价格,出动车辆,工具总套数,工具总价格 的字段汇总。
这讲的思路和上一讲也一样:对于两个数据表先分别进行数据的汇总,然后再用右外连接同时连接这两个汇总的数据,就可以得到我们的最终结果了。
由于内容侧重关心的是数据源[数据4],要把这个数据资料放在右表表,然后建立一个右外连接。实现我们的要求,
下面看我的代码:
Sub mynzRecords_69() '第69讲 右外连接right join ON 连接两个SQL
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("69").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 连接数据源[数据5$],汇总项目
strSQL1 = "select 项目,SUM(车辆) AS 出动车辆,SUM(工具套数) AS 工具总套数,SUM(工具套数*工具单价) AS " _
& "工具总价格 from [数据5$] group by 项目"
'建立SQL2 连接数据源[数据4$],汇总项目
strSQL2 = "select 项目,SUM(人数) AS 总人数,SUM(价格) AS 总价格 from [数据4$] group by 项目"
'建立SQL 连接之前建立的两个SQL语句,为了测试把数据4即SQL2作为右表
strSQL = "Select b.项目,b.总人数,b.总价格,a.出动车辆,a.工具总套数,a.工具总价格 From (" _
& strSQL1 & ") a right Join (" & strSQL2 & ") b " _
& "ON a.项目=b.项目 GROUP BY b.项目,b.总人数,b.总价格,a.出动车辆,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 上述代码应用于侧重于右表,返回右表各个字段的汇总表格,当左表中没有数据时返回null,对于左右表,在建立右外连接前,用SQL建立的两个数据源的汇总。
2 '建立SQL1 连接数据源[数据5$],汇总项目
strSQL1 = "select 项目,SUM(车辆) AS 出动车辆,SUM(工具套数) AS 工具总套数,SUM(工具套数*工具单价) AS " _
& "工具总价格 from [数据5$] group by 项目"
上述SQL语句实现了数据源[数据5$]的数据汇总。
3 '建立SQL2 连接数据源[数据4$],汇总项目
strSQL2 = "select 项目,SUM(人数) AS 总人数,SUM(价格) AS 总价格 from [数据4$] group by 项目"
上述SQL语句实现了数据源[数据4$]的数据汇总。
4 '建立SQL 连接之前建立的两个SQL语句,为了测试把数据4即SQL2作为右表
strSQL = "Select b.项目,b.总人数,b.总价格,a.出动车辆,a.工具总套数,a.工具总价格 From (" _
& strSQL1 & ") a right Join (" & strSQL2 & ") b " _
& "ON a.项目=b.项目 GROUP BY b.项目,b.总人数,b.总价格,a.出动车辆,a.工具总套数,a.工具总价格"
上述SQL语句实现了数据源strSQL1和数据源strSQL2的右外连接。同时注意,代码都是我调试好的,读者可以在文件中直接复制到自己的程序中,修正使用。尽可能不要去做积木,而是要搭建积木。这样会大大提高我们的工作效率,
下面我们看代码的运行情况:
今日内容回向:
1 右外连接是如何实现连接两个SQL语句的?
2 上述方案用于什么情况呢?为什么上面的结果和上一讲的结果一样呢?
猜你喜欢
- 2024-10-11 SQL语法——右连接 RIGHT JOIN 关键字
- 2024-10-11 数据筛选,如何像SQL一样使用Pandas完成JOIN连接、UNION合并查询
- 2024-10-11 SQL多个Join on 和Where间的执行顺序(nest loop join机制)
- 2024-10-11 SparkSQL大数据实战:揭开Join的神秘面纱
- 2024-10-11 SQL INNER JOIN 关键字 sql关键字union
- 2024-10-11 阿里规范不建议多表join,可这SQL要怎么写
- 2024-10-11 SQL RIGHT JOIN 关键字 sql语句 关键字
- 2024-10-11 Apache Flink 漫谈系列-JOIN 算子
- 2024-10-11 awk实现类sql的join操作 awvs结合sqlmap
- 2024-10-11 扩展FlinkSQL实现流与维表Join flinksql mysql维表
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)