こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル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'
 集計関数の一部として指定された式'出荷日'を含んでいないクエリを
 実行しようとしました。

投稿日時 - 2009-07-19 11:02:13

QNo.5137386

困ってます

質問者が選んだベストアンサー

集計関数には次のものがあります。
MAX:最大値
MIN:最小値
SUM:合計
AVG:平均
COUNT:件数
http://homepage2.nifty.com/inform/vbdb/sql_func.htm

Accessではこの他にFIRST、LASTなどもありますが、方言なので
一般的なDBシステムでは存在しません。今回の事例では出荷量の
合計なので、SUMを使うところでしょう。

投稿日時 - 2009-07-20 13:00:24

お礼

何度もご回答頂きありがとうございました。
大変参考になりました。

投稿日時 - 2009-07-20 17:26:19

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

>未だ悩んでいます
どんなデータを表示したいかです。
そもそもグループ化する必要があるのか疑わしいですね。
むしろ、出荷日と品番でグループ化し、集荷量は出荷日の合計とか
いうほうが普通なんじゃないでしょうか。
とりあえず、どのような情報が収録されているか、どのような形式の
データが必要かをまとめることが大切です。

投稿日時 - 2009-07-20 01:28:37

お礼

しつこくて何度もすみません。

>むしろ、出荷日と品番でグループ化し、集荷量は出荷日の合計とか
 いうほうが普通なんじゃないでしょうか。

おっしゃる通りです。

グループ化は
mySQL = mySQL & " GROUP BY 出荷日, 品番;"

その「出荷量」を合計する記述の書き方が分からないで悩んでいます。

投稿日時 - 2009-07-20 10:38:02

ANo.2

GROUP BY の指定項目以外(品番、ロケーション、出荷量)以外は
集計関数(MAX、MINなど)を使わなければなりません。
例えば、50人ずつ6クラスのクラス別成績を考えましょう。
クラスでグループ化するとなると、出てくるデータは6件です。
この時、点数はどうしますか?50人の点数の何を出すかです。
最大、最低、合計、平均、・・・こういうのは出せますが、単に「得点」
と言われても困るでしょう。だから集計関数が必要なのです。
尚、AccessをOLE起動して、TransferSpreadsheetを実行する方が
ずっと、高速です。データ量が多い場合は注意が必要です。
但し、Accessがインストールされていない場合はできません。

投稿日時 - 2009-07-19 12:12:02

お礼

ありがとうございます。
その後、色々調べて見たのですが、
未だ悩んでいます。

>GROUP BY の指定項目以外(品番、ロケーション、出荷量)以外は
>集計関数(MAX、MINなど)を使わなければなりません。

具体的にどの様な記述をすれば宜しいでしょうか。
お教え頂きたくよろしくお願い致します。

投稿日時 - 2009-07-19 22:44:29

ANo.1

GROUP BYに含まれない、かつ演算処理も指定していないフィールド「出荷日」をSELECTで抽出しようとしているためでしょう。「出荷日」でもグループ化するよりないと思います。下記は、試しにAccessでやってみたSQLです。ご参考まで。
SELECT 出荷データTMP.出荷日, 出荷データTMP.品番, 出荷データTMP.出荷量
FROM 出荷データTMP
GROUP BY 出荷データTMP.出荷日, 出荷データTMP.品番, 出荷データTMP.出荷量, 出荷データTMP.ロケーション
HAVING (((出荷データTMP.出荷量)<>0));

投稿日時 - 2009-07-19 11:57:53

お礼

ありがとうございます。
「出荷日」もグループ化して見ました。
すると今度は違うエラーが発生しました。

実行時エラー'3601'
パラメータが少なすぎます。2を指定してください。

と出ます。
どうしていいものやら、困っています。
ご教授頂きたく宜しくお願いいたします。

投稿日時 - 2009-07-19 23:41:59

あなたにオススメの質問