ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于SQL在工作簿-工作表之间的查询、排序、转置(盖楼中....)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-22 11:45 | 显示全部楼层
好贴,把常用的ado对象中的很多经常可能会犯的错误及解决方法都列示出来了

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-23 01:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

问个得寸进尺的问题:VBA中SQL将字符串分组连接成一个字符串

本帖最后由 opiona 于 2012-7-23 11:10 编辑
wuxiang_123 发表于 2012-7-22 10:15
按下面格式写,利用聚合函数忽略空值。
问一个题外话:
如果一个人在一个字段的多行都有字符串,一个字母或多个字母
想汇总时,一个人占一行,同字段的多行字符都要(不是只要MAX的)
应该如何做呢!??
查到有SQL2005等下实现的语句,但是看不懂.

附件: Book2.rar (33.6 KB, 下载次数: 42)
源数据:
数据.png
想要的效果如下:
同字段多行都有字符.jpg


TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-23 12:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
自己顶一下,哈哈

TA的精华主题

TA的得分主题

发表于 2012-7-24 09:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
opiona 发表于 2012-7-23 01:24
问一个题外话:
如果一个人在一个字段的多行都有字符串,一个字母或多个字母
想汇总时,一个人占一行,同 ...

我只知道在SQL SERVER2005版本以上可以用FOR XML PATH实现你的效果。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-25 19:17 | 显示全部楼层

关于在EXCEL2007中SQL无标题查询(HDR=NO)最多65536行的问题(此题无解)感谢赵版主

本帖最后由 opiona 于 2012-7-26 11:00 编辑

在SQL查询时候,很多是没用列标题的,如:列标题是合并单元格等等
Cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no';data source=" & ThisWorkbook.FullName
SQL="SELECT * FROM [数据表$A5:C65536"]
EXCEL2003时候没有问题
但是在Excel2007时候,
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=NO';data source=" & ThisWorkbook.FullName
SQL="SELECT * FROM [数据表$A5:C1048576"]
会报错,1048576改成65536,或更小就没问题了。
搜索了一番,说这是Excel2007的一个BUG

请问:Excel2010版本还存在这个问题么
          或者Excel2007中有其他办法解决这个问题!

TA的精华主题

TA的得分主题

发表于 2012-7-25 19:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zhaogang1960 于 2012-7-26 00:11 编辑
opiona 发表于 2012-7-25 19:17
在SQL查询时候,很多是没用列标题的,如:列标题是合并单元格等等
Cn.Open "provider=microsoft.jet.oledb ...


应该是ThisWorkbook.FullName——自连接的问题
2007SP2测试:
不写区域可以查询全部数据Sql = "select * from [sheet1$]"
写区域只能查询65536行以内数据Sql = "select * from [sheet1$a1:a]"
2010也是如此

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-23 19:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

SQL的查询结果按照某字段的指定顺序进行排序,而且此字段有重复内容

SQL按照指定顺序排序,有重复.rar (10.8 KB, 下载次数: 34)
有请版主和各位大侠帮忙
数据源:
一个数据源和若干关键字进行模糊查询
即:所有明星字段中包含有输入关键字那些名字的
应排序和分页的要求,我在后面缀上了关键字(根据什么查到的)
上面已经实现

我的问题是:用SQL提取不重复,按照A列排序
查到的结果有重复内容(黄色部分)(关键字不同)
如何提取不重复内容,按照A列内容的顺序进行排序
关键字不同的 只留一个,
如果可能,只留最开始在A列出现的那一个关键字
源数据.jpg
最终效果: 需要的效果.jpg

TA的精华主题

TA的得分主题

发表于 2013-1-23 21:05 | 显示全部楼层
短信收到,请测试:

  1. Sub Macro1() '有重复取第一个关键字
  2.     Dim cnn As Object, SQL$
  3.     Set cnn = CreateObject("ADODB.Connection")
  4.     cnn.Open "Provider = Microsoft.Jet.Oledb.4.0;Extended Properties =Excel 8.0;Data Source =" & ThisWorkbook.FullName
  5.     SQL = "Select a.*,b.输入关键字 as 关键字 from [Sheet1$" & Sheets("Sheet1").Range("C1").CurrentRegion.Address(0, 0) & "] a,[Sheet1$" _
  6.         & Sheets("Sheet1").Range("a1").CurrentRegion.Address(0, 0) & "] b where instr(a.明星,b.输入关键字)"
  7.     SQL = "select 编号,电影名,明星,first(关键字) from (" & SQL & ")  group by 编号,电影名,明星 order by 编号"
  8.     With Sheets("Sheet2")
  9.         .UsedRange.Offset(1).ClearContents
  10.         .[a2].CopyFromRecordset cnn.Execute(SQL)
  11.     End With
  12.     cnn.Close
  13.     Set cnn = Nothing
  14. End Sub



  15. Sub Macro2() '有重复取最后一个关键字
  16.     Dim cnn As Object, SQL$
  17.     Set cnn = CreateObject("ADODB.Connection")
  18.     cnn.Open "Provider = Microsoft.Jet.Oledb.4.0;Extended Properties =Excel 8.0;Data Source =" & ThisWorkbook.FullName
  19.     SQL = "Select a.*,b.输入关键字 as 关键字 from [Sheet1$" & Sheets("Sheet1").Range("C1").CurrentRegion.Address(0, 0) & "] a,[Sheet1$" _
  20.         & Sheets("Sheet1").Range("a1").CurrentRegion.Address(0, 0) & "] b where instr(a.明星,b.输入关键字)"
  21.     SQL = "select 编号,电影名,明星,last(关键字) from (" & SQL & ")  group by 编号,电影名,明星 order by 编号"
  22.     With Sheets("Sheet2")
  23.         .UsedRange.Offset(1).ClearContents
  24.         .[a2].CopyFromRecordset cnn.Execute(SQL)
  25.     End With
  26.     cnn.Close
  27.     Set cnn = Nothing
  28. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2013-1-23 21:07 | 显示全部楼层
由于你没有上传数据源,就借用Sheet1的两个区域作为数据源,请看附件
SQL按照指定顺序排序,有重复.rar (15.09 KB, 下载次数: 82)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-24 00:33 | 显示全部楼层
感谢版主,现在又知道SQL里面原来还有 first和last
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 09:36 , Processed in 0.047623 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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