VBA中的按SQL查询分组

VBA中的按SQL查询分组,sql,vba,excel,Sql,Vba,Excel,我有一个查询,我想通过在初始选项卡中有两行的代码进行合并,但是我不断收到一个错误,无法对用“*”选择的字段进行分组。有什么想法吗 选项显式 子获取_代码() OptimizeVBA True:ShDel(“加工”) Dim cn作为ADODB.Connection Set cn=New ADODB.Connection 与cn .Provider=“Microsoft.ACE.OLEDB.12.0” .ConnectionString=“数据源=“&thispoolk.FullName&”;”和

我有一个查询,我想通过在初始选项卡中有两行的代码进行合并,但是我不断收到一个错误,无法对用“*”选择的字段进行分组。有什么想法吗

选项显式
子获取_代码()
OptimizeVBA True:ShDel(“加工”)
Dim cn作为ADODB.Connection
Set cn=New ADODB.Connection
与cn
.Provider=“Microsoft.ACE.OLEDB.12.0”
.ConnectionString=“数据源=“&thispoolk.FullName&”;”和_
“扩展属性=”“Excel 12.0宏;IMEX=1;HDR=YES”“
打开
以
将rs设置为ADODB.Recordset
Set rs=New ADODB.Recordset
rs.Open“从[Holdings$]中选择*,其中[Holdings$].'Code$']='%91'按['Code']分组”,cn
作为ADODB.字段的Dim fld
作为整数的Dim i
Sheets.Add.name=“加工”
使用此工作簿。工作表(“工作”)
i=0
对于rs字段中的每个fld
i=i+1
.Cells(1,i).Value=fld.name
下一个fld
.单元格(2,1).从记录集复制
.UsedRange.Columns.AutoFit
以
rs.Close
cn.Close
优化VBA错误
端接头
Optimize只优化工作簿,SHdel删除工作表

无法对使用“*”选择的字段进行分组

非常明确:当您执行
选择*
时,您不能
分组。明确指定字段列表

SELECT [Code$], [Foobar] FROM [Holdings$] WHERE [Holdings$].['Code$'] ='%91' GROUP BY [Code$], [Foobar]
请注意,
SELECT
子句中未聚合的所有字段必须出现在
GROUP BY
子句中


如果不需要聚合任何内容,可以删除
GROUP BY
子句,改为
SELECT DISTINCT

General GROUP BY tip:“如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识一个分组列或是集合函数的参数。”也许你的意思是按['code']排序?按分组意味着聚合(min/max/avg/count),而您不进行聚合。或者使用DISTINCE来消除重复项?为什么引用该字段?该列标题中真的有引用吗?关于@xQbert的评论:这是什么SQL引擎?windowfunction/分析功能是否可以在没有任何分组的情况下获得“总和”?例如
sum(var)over(partition by unique key/columns)
我明白了,当你这样说的时候是有道理的。为什么在不涉及聚合函数的情况下按分组,而不是简单的选择DISTINCT?@jarlh,这就是OP的特点。@Mat的杯子用于SQL server,oracle,这是真的。对于mySQL来说,情况并非如此。即使在SQL server和oracle中,更复杂的查询也可能会导致不同的执行计划,其中分组方式和不同的使用方式会导致不同的计划。(我们不知道这里的引擎,尽管它暗示它是MSFT产品)好吧,那是口味的问题。OP有50列。