2009-07-17 74 views
1

問題:
我原本有一個很好的查詢,但我現在不得不改變它來拉更多的領域。當我嘗試運行新查詢時,它會選擇一個字段名稱,並說我沒有將其作爲聚合函數的一部分。每次出現此錯誤時,我都可以將錯誤指定的字段添加到Group By語句,並且錯​​誤消息將選擇一個未包含的新字段。任何人有任何想法,我如何才能獲得與原始查詢相同的信息,只是有更多的字段?爲什麼我的查詢在我的Group By中需要更多的字段?

的查詢是如何工作的說明:
查詢是爲了拉一個記錄每個組不同的readings_miu_id S和ReadDate秒(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 
+1

你爲什麼分組?在查詢中似乎沒有任何聚合。 – YonahW 2009-07-17 19:58:27

+0

因爲我需要每個分組的不同readings_miu_id/ReadDate組合的TOP 1記錄,而且之前我曾告訴過,使用Group By語句是一種做法。 – Bryan 2009-07-17 20:18:43

回答

1

當包括GROUP BY子句,每個字段必須是在GROUP BY或有一個聚集函數(例如,MAX,MIN,SUM,COUNT)施加到其上。

例如,一個簡單的正確實施可能是:

選擇部門,MAX(薪金)FROM僱員GROUP BY部門

...和一個簡單的不正確的實現是:

SELECT部門,來自員工GROUP BY部門的薪水。

考慮上面的兩個陳述。首先,您可以輕鬆想象一下數據源的外觀和返回的內容。然而,第二,你會回來什麼?您將在結果集中返回哪種個人薪金價值?因此,在對字段進行分組時,結果集中的每個字段必須參與分組,或者是從其他字段組成的組中收集的值的聚合結果。

3

根據我的經驗(這是隻有適度的)結果集中的每列(但不是每一個集合)必須由...組成。

Here's a decent reference

1

您可以通過子查詢或兩個查詢完成此操作。此外,「CurrentDb.Execute」是運行查詢的首選方法(而不是「DoCmd.RunSQL」)。

CurrentDb.Execute strSQL3, dbFailOnError 
相關問題