• ベストアンサー

VB,SQL文のWHERE句について

お世話になります。 エクセルVBにて、ACCESSのテーブルのデータを SQL分にてエクセルシートに書き出そうとしているの ですが、WHERE句の記述方法がおかしいのかエラーになっ てしまいます。(下記の「A9999」(データ型はテキスト 型)のところでエラーになります。 どの様な記述をすれば宜しいのでしょうか。 ご教授頂きたくよろしくお願いします。     記 ・記述内容  mySQL = "SELECT 出荷日, 品番, ロケーション, SUM(出荷量) AS 出荷量の合計"  mySQL = mySQL & " FROM 出荷データTMP"  mySQL = mySQL & " WHERE (((ロケーション) <> "A9999"))"  mySQL = mySQL & " GROUP BY 品番, ロケーション, 出荷量;"  Set rs = db.OpenRecordset(mySQL, dbOpenSnapshot)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エラーは「含んでいないクエリを実行しようとしました」ではないですか。 Googleで「含んでいないクエリを実行しようとしました」で照会すると、沢山記事が出ます。SQL勉強の落とし穴かなと思います。 ーーー エクセルでMsクエリでやってみた(マクロの記録でGroupまで出来ないかと思った)ので、少しSQL文の様子が違うと思いますが SELECT 出荷テーブル.品番, 出荷テーブル.ロケーション, Sum(出荷テーブル.出荷量) FROM `C:\Documents and Settings\xxxx\My Documents\社員2`.出荷テーブル 出荷テーブル GROUP BY 出荷テーブル.品番, 出荷テーブル.ロケーション で実行し 結果 品番  ロケーション 出荷量の集計 11 A1 30.0 11 A2 5.0 11 A3 25.0 12 A1 50.0 12 A2 15.0 12 A3 45.0 のような結果を望んでいるのでは。 1項目の集計である、SUM(出荷量)のようなSQL以外では、 >GROUP BY 品番, ロケーション, 出荷量;"の出荷量はグループ化しない。Group化するとは、どうするのか考えてください。 >出荷日はGROUP BY 品番, ロケーション, 出荷量;"の中に無い。 日別を希望するなら出荷日でグループ化しなければならないし、そうでなければ、例えば ロケーションでまとめれば、その中には日付がバラバラで有るのが普通で、どれを挙げて良いかACCESSのSQLにはわからない。 例えば1学年の生徒にクラス(級)ごとに集れ、1組の生徒に向かって、名前を言え、と先生が言っても、個人の名前は1つでは言い表せないようなもの。現実の生徒なら、慣習で何らかの順番に、順次自分の名前を時間差で唱える(点呼)だろうが、SOLは1つのグループで1つの出荷日といわれてもどうしようか困っちゃう。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

mySQL = mySQL & " WHERE (((ロケーション) <> "A9999"))"               ↓ mySQL = mySQL & " WHERE ロケーション <> ""A9999""" mySQL = mySQL & " WHERE ロケーション <> 'A9999'" ※2行にするのではなく、どちらか一方を選んでください。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

mySQL = mySQL & " WHERE (((ロケーション) <> 'A9999'))"  " ではなく' なのでは?

関連するQ&A

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

  • VBからのsqlの呼び出し方

    VB6.0について質問です。。。 現在SQLを使用して二つのAccessファイルからデータを取得して CSV出力を行っているのですがかなり無駄な処理をしていそうなので もっと簡略化もしくは効率的に出来る方法はないですか? 取得する項目数が多いので以下のソースを何回も交互におこなっています>< ふたつの異なるデータベースをSQLで呼び出すのに毎回切断して接続の長々としたプログラムで見栄えもわるいです、、、 お知恵をおかしください。 dbs.Close Set MyWorkspace = Workspaces(0) 'iniファイルからmdbのパスを取得 Set dbs = MyWorkspace.OpenDatabase(PATH1) '指定のmdbファイルを開く Set ds = dbs.OpenRecordset("select XXX from abc where No = " & XXX & " ;") 'レコードカウントする tmp2 = tmp2 & ds.Fields(0).Value & "," dbs.Close Set MyWorkspace = Workspaces(0) Set dbs = MyWorkspace.OpenDatabase(PATH2) Set ds = dbs.OpenRecordset("select XXX from efg where No = " & XXX & " ;") tmp2 = tmp2 & ds.Fields(0).Value & "," ・ ・ ・

  • SQL WHERE句 分岐?

    SQL Server 2005 を使っております。 WHERE句の分岐といいますか、記述の方法がわからないのですが、下記がその部分になります。 下記のコードを実行すると、都道府県、血液型、両方に何かしらのデータが入っているものしか抽出してきません。都道府県、血液型、どちらかの値がNullの場合でも、どちらかの条件が合致していれば、抽出したいのですが、どう記述すればよろしいでしょうか? 下記のコードが Null = Null を認識していれば このコードでも抽出してくるんでしょうが、 Null = Null だと抽出しないんですね。 何卒よろしくお願いいたします。 WHERE (IsNull(@A,dbo.テスト.都道府県) = dbo.テスト.都道府県) AND (IsNull(@B,dbo.テスト.血液型) = dbo.テスト.血液型

  • 【VB】VBでのSQL文の書き方が今一わからない

    表題通りなのですが、いくつかの条件でクエリを行いたいのですが、書き方が今一わからずエラーに悩まされています。 SELECT * FROM テーブル WHERE 条件 条件のところに 出荷日付 A日~B日 フィールド1の文字列=CDEF フィールド2の文字列=GHIJ すべてに当てはまる条件を入れたい場合、どう書けばいいのですか? どうかお助けください。(m_m)

  • SQLの代入について

    お世話になります。 下記の記述がエラーになってしまいます。 「NY」の辺りがおかしいのですが、どう記述したら良いのか ご教示頂きたく宜しくお願い致します。         記 mySQL = "INSERT INTO ZAIKO(ID, HINBAN, HINMEI, QTY, DATE) " & _     "VALUES ('"NY" &"'" & objForm.GetField("品番") & "'" & _   ,' & objForm.GetField("品番") & "'" & _   , & CLng(objForm.GetField("数量")) & _   ,' & Date & " " & Time & "')"

  • SQL Server Where句 Case文

    お世話になります。 Where句のCase文でお尋ねしたいことがあります。 ----------------------------------------------------- WHERE (A = @A) AND (B = @B) AND (C = @C) AND CASE WHEN @D = 0 THEN (dbo.TEST.D = dbo.TEST.D) '全データを WHEN @D = 1 THEN (dbo.TEST.D = 1) '値が1のデータを WHEN @D = 2 THEN (dbo.TEST.D = Is Null) 'データがNull のものを END AND (E = @E) AND (F = @F) AND (G = @G) AND (H = @H) AND CASE WHEN @I = 0 THEN (dbo.TEST.I = dbo.TEST.I) WHEN @I = 1 THEN (dbo.TEST.I = 1) WHEN @I = 2 THEN (dbo.TEST.I = Is Null) END AND (J = @J) ........ ........ ----------------------------------------------------- 上記のように CASE 文で パラメータの値により条件を変えたいのですが、なかなかうまくいきません。こんな記述の仕方ではダメということは薄々わかっているのですが、このようなCASE文をうまく動作させるにはどのように記述すればいいでしょうか? よろしくお願いいたします。

  • WHERE句かHAVING句の書き方

    こんにちは id|時間 A|19:00 A|09:00 B|16:00 C|18:00 のようなデータがあって、現在時刻が20:00とします idでグループ化したデータの時間の最大値が、現在時刻の3時間前 (今回は17:00)よりも前または等しいIDだけ抽出するためには どういう条件式を書けば良いか、ヒントを頂けますでしょうか 今回の例でいうと、結果には B|16:00 のみ出てくるということです WHEREやHAVINGを使って試行錯誤してはみたのですが、どうしても 例でいうところの A|09:00とB|16:00 が出てきてしまう始末です (条件にあう方のデータをとってしまい、除外にならない) IF文をうまいこと混ぜればいけるんでしょうか… コードは頑張って自分で作るので、考え方のヒントやこういうのを 使ってみるといいよ、といったアドバイスを頂けると助かります うまく質問の意図が伝わっているか不安ですが、ヨロシクお願いします mysql クライアントのバージョンは5.0.45です

    • ベストアンサー
    • MySQL
  • WHERE句内でプライマリキーの検査ができない

    こんにちは。mySQL初心者です。 例えば、「sample」というDBに以下の3つのフィールドのあるテーブル「text」があるとします。 (実際には、DATETIME型のフィールドも含めて20列あります) key => 整数型で、プライマリキー&オートインクリメントを設定 status => テキスト型(UTF-8) note => テキスト型(UTF-8) ここで、「SELECT * FROM text WHERE key=1」というSQLで1つ目のレコードを取得しようとすると、「#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key=1 LIMIT 0, 30' at line 1」というエラーが出てしまいます。 「SELECT * FROM text WHERE status='sample_01'」や「SELECT * FROM text WHERE note='test entry'」というSQL文ならちゃんとデータを取得できるのですが、「WHERE key=1」のようにプライマリキーで検索しようとするとエラーになるのは何故でしょうか。 どなたか見当が付くかたがいらっしゃいましたら、教えていただけないでしょうか。 よろしくお願いします。 <環境> XAMPP Ver.1.7.4で、mySQLは Ver. 5.5.8です。

    • ベストアンサー
    • MySQL
  • php5+mysqlのSELECT文でwhere句を指定すると正しく動

    php5+mysqlのSELECT文でwhere句を指定すると正しく動きません。 レコード数を取得します。 ここで、field10(category)=text型の値に基づきレコード数を取得したいのですが、 $sql="select * from A where B='C'"; とするとレコード出力(index.php)で0を出力。 where句を指定せずに $sql="select * from A"; とするとレコード出力(index.php)で97を出力。 文字コード関係のQ&Aサイトを見ましたが、phpファイルの冒頭部分に $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); を指定しています。 テーブルAに含まれるデータは、csv(,区切り)で、load data infile・・・しました。 ※Records:97 Deleted:0 Skipped:0 Warnings:0 他に考えられる原因・対処方法はありますでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • adoのWHERE句 クエリだとフィルタされない

    エクセルvbaなのですが、 adoのWHERE句は、テーブルじゃないとダメなのでしょうか? と言うのも、 rs.Open "Q_カテゴリ WHERE 分類 like '%A%'" だと、エラーにならないのですが、抽出もされずに全レコードが対象になってしまいます。 しかし、 rs.Open "T_カテゴリ WHERE 分類 like '%A%'" にすれば、抽出された後のレコード数が取得されます。 エラーにならない事から、オブジェクトは存在してる事は確かなはずですが なぜかフィルタできません。 なぜでしょうか?