ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: hyz00001

[求助] ado 使用full join 查询。

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 16:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hyz00001 发表于 2019-1-23 16:21
谢谢您。

上午的那个已经搞定。主要是括号使用了中文状态的括号。

三个表的连接也已经搞定,但只是内连接 意思是三张表都要有数据才显示。在这里的需要是:

已经由三张表组成了编码表:bm,只要bm表里面有数的都显示出来。

    s1 = "select 资产编码,原值本币 as bg原值,累计折旧 As bg折旧 from [期初清单$]"
    s2 = "select 资产编码,原值本币 as bg原值,累计折旧 As bg折旧 from [期末清单$]"
    bm1 = "select 资产编码 from [期初清单$] union all select 资产编码 from [期末清单$] union all select 资产编码 from [明细账$]"
    bm = "select distinct 资产编码 from (" & bm1 & ")"

s = "select * from (" & bm & ") t1,(" & s1 & ") t2,(" & s2 & ") t3 where t1.资产编码=t2.资产编码 and t1.资产编码=t3.资产编码"

TA的精华主题

TA的得分主题

发表于 2019-1-23 17:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
amazeyeli 发表于 2019-1-23 15:15
select * from t1 full join t2 on
=
select * from t1 left join t2 on

真心没看懂,能解释一下吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 17:02 | 显示全部楼层
hyz00001 发表于 2019-1-23 16:21
谢谢您。

上午的那个已经搞定。主要是括号使用了中文状态的括号。

感谢各位,刚才那个问题我自己想明白了。可以通过多重连接来实现三张表left join查询。

但另外两个问题困扰我,请帮忙看看。
问题1:我查询之后的表头怎么样弄到。
问题2:如果我的excel表里面的字段比较奇怪,要怎么样编写语句。例如字段名为:“原值(综合本位币):余额”

自己修改之后的代码如下:
  1. Sub ado方法()
  2.     Set conn = CreateObject("ADODB.Connection")   '
  3.     Set rst = CreateObject("ADODB.Recordset")  '
  4.     conn.Open "dsn=excel files;dbq=" & ThisWorkbook.FullName
  5.     bm1 = "select 资产编码 from [期初清单$] union all select 资产编码 from [期末清单$] union all select 资产编码 from [明细账$]"
  6.     bm = "select distinct 资产编码 from (" & bm1 & ")"
  7.     s1 = "select 资产编码,原值本币 as bg原值,累计折旧 As bg折旧 from [期初清单$]"
  8.     s2 = "select 资产编码,原值本币 as bg原值,累计折旧 As bg折旧 from [期末清单$]"
  9.     s3 = "select 资产编码,原值(综合本位币):借方金额 as dr原值,'原值(综合本位币):贷方金额' As cr折旧,'累计折旧(综合本位币):借方金额' as dr折旧 from [明细账$]"
  10.     s4 = "select t1.资产编码 as 资产编码,* from (" & bm & ") t1 left join (" & s1 & ") t2 on t1.资产编码=t2.资产编码"
  11.     s5 = "select * from (" & s4 & ") t3 left join (" & s2 & ") t4 on t3.资产编码=t4.资产编码"
  12.     s = "select * from (select t1.资产编码 from (" & bm & ") t1 left join (" & s1 & ") t2 on t1.资产编码=t2.资产编码) t1 left join (" & s1 & ") t2 on t1.资产编码=t2.资产编码"
  13.     s = "select * from (" & bm & ") t1,(" & s1 & ") t2,(" & s2 & ") t3 where t1.资产编码=t2.资产编码 and t1.资产编码=t3.资产编码"
  14.     Set rst = conn.Execute(s5)
  15.     Sheets("表").[a2].CopyFromRecordset rst
  16. end sub
复制代码




TA的精华主题

TA的得分主题

发表于 2019-1-23 17:04 | 显示全部楼层
05050818 发表于 2019-1-23 17:00
真心没看懂,能解释一下吗

全连接=左连接+右连接
试一下就知道了

TA的精华主题

TA的得分主题

发表于 2019-1-23 17:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hyz00001 发表于 2019-1-23 17:02
感谢各位,刚才那个问题我自己想明白了。可以通过多重连接来实现三张表left join查询。

但另外两个问 ...

非法字段名用[]括起来
Sub test()

    Dim cnn As Object, rst As Object

    Dim Sql As String, i As Long

    Set cnn = CreateObject("adodb.connection")

        cnn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Extended Properties = Excel 12.0;Data Source = " & ThisWorkbook.FullName

        Sql = "SELECT * FROM [Sheet1$]"
   
    Set rst = cnn.Execute(Sql)

    [a:i].ClearContents
   
    For i = 0 To rst.Fields.Count - 1

        Cells(1, i + 1) = rst.Fields(i).Name

    Next

    Range("a2").CopyFromRecordset rst
   
    cnn.Close

    Set cnn = Nothing

End Sub



[a:i].ClearContents
   
    For i = 0 To rst.Fields.Count - 1

        Cells(1, i + 1) = rst.Fields(i).Name

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 09:46 , Processed in 0.039969 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表