ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: opiona

[分享] 在EXCEL中使用SQL语句查询集锦-持续更新中,敬请关注

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-20 22:07 | 显示全部楼层
本帖已被收录到知识树中,索引项:ADO技术
opiona 发表于 2013-1-20 21:05
限制查询多少列数据(或者说多少字段数),字段名之间用[,]分割,没有空
你就在SQL写入多少个字段饿名称
...

谢谢!我以为也可象记录数一样直接用代码限制前面N列而不用列出字段名呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-21 11:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这就是熟练的问题了,前面有个帖子是长语句连接的
例如列标题在A1:D1  姓名、年龄、性别、工资
  1. for i=1 to 4
  2. if StrSQL="" then
  3. StrSQL="select " & sheet1.cells(1,I)
  4. else
  5. StrSQL=StrSQL & "," & sheet1.cells(1,I)
  6. end if
  7. next I
  8. StrSQL=StrSQL & " from 工资表"
复制代码

TA的精华主题

TA的得分主题

发表于 2013-1-22 11:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-1-22 13:47 | 显示全部楼层
本帖最后由 tclnxc 于 2013-1-23 10:01 编辑

大师,可否给我看看附件中这句SQL出现了什么问题?另外,多表多字段(各表字段相同)可否有这样 的写法:SQL = "select 年份,期间,业务日期,单据日期,凭证字,凭证号,摘要,客户代码 from [1109$][1110$][1111$]",谢谢!
Sub 复制数据()
  Dim cnn As New ADODB.Connection
  Dim SQL As String
  With cnn
     .Provider = "Microsoft.Jet.OLEDB.4.0"
     .ConnectionString = "Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
     .Open
  End With
  For Each Sh In Sheets
  If Sh.Index > Sheets("汇总表").Index Then
  l = Sheets("汇总表").Range("A60000").End(3).Row
    SQL = "select 年份,期间,业务日期,单据日期,凭证字,凭证号,摘要,客户代码,客户名称,销售部门代码,Tulip单号,CRM单号,核对,商品名称,规格型号,数量,含税单价,价税合计" & _
"from[" & Sh.Name & "$a1:s65536]where 核对='未回'"
   Sheets("汇总表").Range("a" & l + 1).CopyFromRecordset cnn.Execute(SQL)
  End If
  Next
  cnn.Close
  Set cnn = Nothing
End Sub
终于发现了问题,原来是表的格式不对

2011.9-2012.12回单.rar

48.02 KB, 下载次数: 100

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-23 10:51 | 显示全部楼层

SQL连接多个表格

本帖最后由 opiona 于 2013-1-23 10:55 编辑
  1. SELECT A.姓名,A.年龄,C.性别,B.得分 FROM [数据表_1$] AS A,[数据表_2$] AS B,[数据表_2$] AS C WHERE A.姓名=B.姓名 AND A.姓名=C.姓名
复制代码

这样可以连接多个表,
一般要求关键字(这里是姓名)各表都有,
而且最好不重复(如果有重复,结果可能不是你需要的,例如:利用一楼的附件)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-23 12:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 tclnxc 于 2013-1-23 14:03 编辑
opiona 发表于 2013-1-23 10:51
这样可以连接多个表,
一般要求关键字(这里是姓名)各表都有,
而且最好不重复(如果有重复,结果可能 ...


非常感谢!为什么字段名前面的字母不是同一个表的代号呢?这样表示应该是从不同表中分别提取不同字段数据吗?但如果我想从各表中都要提取相同字段的数据,是否不需加代号呢?另外,如果是多个工作表中字段名顺序不一致或者说有些分表中个别字段缺少的话,想要提取相同字段的数据汇总到一个工作表中,是不是只能循环选择每一个相同字段数据逐一复制到汇总表中呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-23 18:48 | 显示全部楼层
本帖最后由 opiona 于 2013-1-23 18:52 编辑

各表中都要提取相同字段的数据
如果各表的字段完全相同:
  1. SELECT * FROM TABEL1 UNION ALL SELECT * FROM TABEL2  UNION ALL SELECT * FROM TABEL3
复制代码

如果各表的字段不完全相同,就选择都有的字段:
  1. SELECT 姓名,年龄 FROM TABEL1 UNION ALL SELECT 姓名,年龄 FROM TABEL2  UNION ALL SELECT 姓名,0 as 年龄 FROM TABEL3  
复制代码

(假设TABEL3内没有年龄这个字段,可以用:0、'字符'、Null 来占位
这样的结果是列出几个表这些指定字段的全部内容
UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复
使用UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)资料值无重复

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-23 19:34 | 显示全部楼层
opiona 发表于 2013-1-23 18:48
各表中都要提取相同字段的数据
如果各表的字段完全相同:
如果各表的字段不完全相同,就选择都有的字段: ...

谢谢!对SQL语句又有了些理解

TA的精华主题

TA的得分主题

发表于 2013-1-28 22:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opiona 发表于 2012-4-24 16:33
'Excel2003版本:cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data So ...

大侠你好!用SQL语句查询能否做到在不打开文件(文件有打开密码123)进行查询?请见附件,谢谢! 跨表多条件汇总.rar (37.95 KB, 下载次数: 98)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-29 11:33 | 显示全部楼层
忘得快 发表于 2013-1-28 22:50
大侠你好!用SQL语句查询能否做到在不打开文件(文件有打开密码123)进行查询?请见附件,谢谢!

ADO好像不支持带密码的Excel链接
可以先打开,链接,然后在关闭
打开的代码:
  1. Set WB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\A1.xls", Password:="123")  '//打开带密码的工作簿


  2. WB.Close   '//关闭工作簿
  3. Set WB = Nothing
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-5 21:34 , Processed in 0.048903 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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