1

問題:
当初は問題なく機能していたクエリがありましたが、より多くのフィールドをプルするようにクエリを変更する必要があります。新しいクエリを実行しようとすると、フィールド名が選択され、集計関数の一部として含まれていないと表示されます。このエラーが発生するたびに、エラーが指定するフィールドを Group By ステートメントに追加できます。エラー メッセージは、含まれていない新しいフィールドを選択します。フィールドを増やすだけで、元のクエリで取得していたのと同じ情報を取得する方法について、誰かアイデアがありますか?

クエリの動作方法の説明:クエリは、 readings_miu_idReadDate
の 個別のセットごとに 1 つのレコードを取得することを目的としています ( 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

...そして単純な間違った実装は次のようになります:

部門、給与 FROM 従業員 GROUP BY 部門を選択します。

上記の 2 つのステートメントを検討してください。まず、データソースがどのように表示され、何が返されるかを簡単に想像できます。しかし、2番目の場合、何を返しますか? 結果セットで返す Salary の個々の値はどれですか? したがって、フィールドをグループ化する場合、結果セットの各フィールドは、グループ化に参加するか、他のフィールドで構成されるグループから収集された値の集計の結果である必要があります。

于 2009-07-17T19:57:11.947 に答える
1

サブクエリまたは 2 つのクエリを使用してこれを実現できます。また、「CurrentDb.Execute」は、(「DoCmd.RunSQL」ではなく) このようなクエリを実行するための推奨される方法です。

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