1

问题:
我最初有一个运行良好的查询,但我现在不得不更改它以提取更多字段。当我尝试运行新查询时,它会选择一个字段名称并说我没有将它作为聚合函数的一部分包含在内。每次我收到此错误时,我都可以将错误指定的字段添加到 Group By 语句中,并且错误消息将选择一个不包含的新字段。任何人都知道如何通过更多字段获得与原始查询相同的信息?

查询应该如何工作
的描述:查询旨在为每组不同的readings_miu_idReadDate提取一条记录(PremID 字段对于每个不同的readings_miu_id都是相同的)。

原始查询:

strSql3 = " SELECT Distinct readings_miu_id, ReadDate, PremID " & _
          "INTO analyzedCopy2 " & _
          "FROM analyzedCopy "

DoCmd.SetWarnings False
DoCmd.RunSQL strSql3
DoCmd.SetWarnings True

新查询:

strSql3 = " SELECT Top 1 readings_miu_id, Reading, ReadDate,Format([MIUtime],'hh:mm:ss') AS ReadTime,MIUwindow,SN,Noise,RSSI,ColRSSI,MIURSSI,Firmware,CFGDate,FreqCorr,Active,MeterType,OriginCol,ColID,Ownage,SiteID,PremID , Neptune_prem.prem_group1, Neptune_prem.prem_group2,ReadID " & _
          "INTO analyzedCopy2 " & _
          "FROM analyzedCopy " & _
          "Group By readings_miu_id, ReadDate, PremID  " & _
          "Order By readings_miu_id, ReadDate, ReadID, PremID "

DoCmd.SetWarnings False
DoCmd.RunSQL strSql3
DoCmd.SetWarnings True
4

3 回答 3

3

根据我的经验(只是中等),结果集中的每一列(但不是每个聚合)都必须在 group by 中。

这是一个不错的参考

于 2009-07-17T19:53:18.647 回答
2

当您包含 GROUP BY 子句时,每个字段必须要么在 GROUP BY 中,要么应用聚合函数(例如,MAX、MIN、SUM、COUNT)。

例如,一个简单的正确实现可能是:

SELECT Department, MAX( Salary ) FROM Employees GROUP BY Department

...一个简单的错误实现是:

SELECT Department, Salary FROM Employees GROUP BY Department。

考虑上面的两个陈述。首先,您可以轻松想象数据源的外观和返回的内容。但是对于第二个,你会返回什么?您会在结果集中返回哪个 Salary 值?因此,当您对字段进行分组时,结果集中的每个字段必须要么参与 GROUPing,要么是从由其他字段组成的组中收集的值的聚合结果。

于 2009-07-17T19:57:11.947 回答
1

您可以通过一个子查询或两个查询来完成此操作。此外,“CurrentDb.Execute”是运行此类查询的首选方法(而不是“DoCmd.RunSQL”)。

CurrentDb.Execute strSQL3, dbFailOnError
于 2009-07-29T21:34:11.950 回答