- ベストアンサー
エクセルVBにて
お世話になります。 エクセルVBにて、ACCESSのテーブルのデータを SQL分にてエクセルシートに書き出そうとしているの ですが、OpenRecordsetをする時、 エラーメッセージが出てしまいます。 どうすれば書き出せるのでしょうか。 ご教授頂きたくよろしくお願いします。 記 ・記述内容 mySQL = "SELECT 出荷日, 品番, 出荷量" mySQL = mySQL & " FROM 出荷データTMP" mySQL = mySQL & " WHERE (((出荷量) <> 0))" mySQL = mySQL & " GROUP BY 品番, ロケーション, 出荷量;" Set rs = db.OpenRecordset(mySQL, dbOpenSnapshot) ←ここでエラーが出る ・エラー内容 実行時エラー'3122' 集計関数の一部として指定された式'出荷日'を含んでいないクエリを 実行しようとしました。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
集計関数には次のものがあります。 MAX:最大値 MIN:最小値 SUM:合計 AVG:平均 COUNT:件数 http://homepage2.nifty.com/inform/vbdb/sql_func.htm Accessではこの他にFIRST、LASTなどもありますが、方言なので 一般的なDBシステムでは存在しません。今回の事例では出荷量の 合計なので、SUMを使うところでしょう。
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
>未だ悩んでいます どんなデータを表示したいかです。 そもそもグループ化する必要があるのか疑わしいですね。 むしろ、出荷日と品番でグループ化し、集荷量は出荷日の合計とか いうほうが普通なんじゃないでしょうか。 とりあえず、どのような情報が収録されているか、どのような形式の データが必要かをまとめることが大切です。
お礼
しつこくて何度もすみません。 >むしろ、出荷日と品番でグループ化し、集荷量は出荷日の合計とか いうほうが普通なんじゃないでしょうか。 おっしゃる通りです。 グループ化は mySQL = mySQL & " GROUP BY 出荷日, 品番;" その「出荷量」を合計する記述の書き方が分からないで悩んでいます。
- nda23
- ベストアンサー率54% (777/1415)
GROUP BY の指定項目以外(品番、ロケーション、出荷量)以外は 集計関数(MAX、MINなど)を使わなければなりません。 例えば、50人ずつ6クラスのクラス別成績を考えましょう。 クラスでグループ化するとなると、出てくるデータは6件です。 この時、点数はどうしますか?50人の点数の何を出すかです。 最大、最低、合計、平均、・・・こういうのは出せますが、単に「得点」 と言われても困るでしょう。だから集計関数が必要なのです。 尚、AccessをOLE起動して、TransferSpreadsheetを実行する方が ずっと、高速です。データ量が多い場合は注意が必要です。 但し、Accessがインストールされていない場合はできません。
お礼
ありがとうございます。 その後、色々調べて見たのですが、 未だ悩んでいます。 >GROUP BY の指定項目以外(品番、ロケーション、出荷量)以外は >集計関数(MAX、MINなど)を使わなければなりません。 具体的にどの様な記述をすれば宜しいでしょうか。 お教え頂きたくよろしくお願い致します。
- mitarashi
- ベストアンサー率59% (574/965)
GROUP BYに含まれない、かつ演算処理も指定していないフィールド「出荷日」をSELECTで抽出しようとしているためでしょう。「出荷日」でもグループ化するよりないと思います。下記は、試しにAccessでやってみたSQLです。ご参考まで。 SELECT 出荷データTMP.出荷日, 出荷データTMP.品番, 出荷データTMP.出荷量 FROM 出荷データTMP GROUP BY 出荷データTMP.出荷日, 出荷データTMP.品番, 出荷データTMP.出荷量, 出荷データTMP.ロケーション HAVING (((出荷データTMP.出荷量)<>0));
お礼
ありがとうございます。 「出荷日」もグループ化して見ました。 すると今度は違うエラーが発生しました。 実行時エラー'3601' パラメータが少なすぎます。2を指定してください。 と出ます。 どうしていいものやら、困っています。 ご教授頂きたく宜しくお願いいたします。
お礼
何度もご回答頂きありがとうございました。 大変参考になりました。