Excel VBAからODBCでSQLを実行する際にエラーが出る原因は?

このQ&Aのポイント
  • Excel VBAから直接ODBCにSQLを実行した際にエラーが発生しています。具体的には、GROUP BYを使用するとエラーが発生しますが、WHEREを使用して実行すると正常に動作します。なぜこのようなエラーが発生するのか、原因を解明してください。
  • Excel VBAを使用してODBCでSQLを実行する際に問題が発生しています。具体的には、GROUP BYを使った場合にエラーが出る問題があります。一方、WHEREを使って実行すると正常に動作します。なぜこのようなエラーが発生するのか、原因を調査してください。
  • Excel VBAから直接ODBCにSQLを実行するときに、GROUP BYを使用するとエラーが発生します。しかし、WHEREを使用して実行すると正常に処理されます。このエラーの原因を特定し、解決策を提案してください。
回答を見る
  • ベストアンサー

ODBC SQL構文 VBA

excel VBから直接ODBCにSQLを実行した時にエラーが出ます。 ソースコードは下記のようになっています。 strSQL = strSQL & "SELECT" strSQL = strSQL & " 店舗別売上明細_22.売上年月日" strSQL = strSQL & ",店舗別売上明細_22.抽出用屋号" strSQL = strSQL & ",店舗別売上明細_22.抽出用商品ブランド名" strSQL = strSQL & ",店舗別売上明細_22.出荷取引分類区分名" strSQL = strSQL & ",SUM(店舗別売上明細_22.売上金額) as 合計" strSQL = strSQL & ",店舗別売上明細_22.取引先コード" strSQL = strSQL & " FROM" strSQL = strSQL & " 店舗別売上明細_22" strSQL = strSQL & " GROUP BY" strSQL = strSQL & " 店舗別売上明細_22.売上年月日" strSQL = strSQL & ",店舗別売上明細_22.抽出用屋号" strSQL = strSQL & ",店舗別売上明細_22.抽出用商品ブランド名" strSQL = strSQL & ",店舗別売上明細_22.出荷取引分類区分名" strSQL = strSQL & ",店舗別売上明細_22.抽出用取引先名" strSQL = strSQL & ",店舗別売上明細_22.商品区分" strSQL = strSQL & ",店舗別売上明細_22.取引先コード" strSQL = strSQL & " HAVING" strSQL = strSQL & " 店舗別売上明細_22.売上年月日" strSQL = strSQL & " Between 2010/01/01 And 2010/01/31" strSQL = strSQL & " AND" strSQL = strSQL & " 店舗別売上明細_22.抽出用商品ブランド名 = '****'" strSQL = strSQL & " AND" strSQL = strSQL & " 店舗別売上明細_22.商品区分 <> '05ノベルティ'" GROUP BYを使わずにWHEREで実行するとうまくいきます。 原因がわかりますでしょうか?

  • Oracle
  • 回答数2
  • ありがとう数3

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

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

厳密に言うと、HAVING句は集計した結果を条件に する場合に使います。対して、WHERE句は最初から 分かっているレコード固有の値を条件にする場合に 使います。例えば、SUM(売上金額)>1000000という 条件は合計して始めて値が分かるので、HAVING句で しか指定できません。しかし、売上年月日の範囲指定、 ブランド名等は最初からレコードにある値が条件なので、 WHERE句を使います。

anman0201
質問者

お礼

参考になりました。 ありがとうございます。

その他の回答 (1)

  • nza49739
  • ベストアンサー率46% (29/62)
回答No.1

長らくやっていないのではずしているかもしれませんが、 「店舗別売上明細_22.商品区分」がグループに指定されているのに、選択項目として表示するようになっていませんね。これが原因と思いますよ。 「店舗別売上明細_22.出荷取引分類区分名」が正しいのでは?

anman0201
質問者

お礼

それでもうまくいきませんでした。 もう少し自分で努力してみます。 ありがとうございました。

関連するQ&A

  • SQL結合条件

    結合抽出(テーブルの表示)の方法はこのままで WHERE句にあるようなの条件を付け加え 計算も行いたいのですが、よい方法はありませんか? どなたか、ご享受ください。 SELECT MS.商品コード, MS.倉庫コード, MS.現在庫数, ISNULL(SUM(UTP.数量),0)  T売上明細ファイル1OR4, MS.現在庫数 + ISNULL(SUM(UTP.数量),0)  帳簿在庫 FROM T商品別倉庫在庫 MS LEFT JOIN T売上明細ファイル UTP ON MS.倉庫コード = UTP.倉庫コード AND MS.商品コード = UTP.商品コード --WHERE --T売上明細ファイル UTP PLUS条件 -- UTP.売上区分コード = 1 --OR --UTP.売上区分コード = 4 GROUP BY MS.商品コード, MS.倉庫コード, MS.現在庫数

  • SQL文を教えて下さい

    VB2008、SQL Server で開発をしています。 下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。 おわかりの方、教えてください。 仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。     売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。     得意先マスタの全得意先を取得する必要があります。     すべての得意先の売上データが存在するわけではありません。 ACCESS上でクエリを作成し、SQLビューにすると、こうなります。 inptSyoCD:画面から入力した商品コード 1,まず、クエリ1: SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称 FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名 WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ; 2,次に、実際に処理するSQL文: SELECT 得意先M.得意先コード, 得意先M.得意先名称,       クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名  FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード; この2つをひとつのSQL文にする方法がわかりません。 よろしくお願いいたします。

  • SQLで追加処理

    sqlで受注日を丁度ここでかかれている and 受注残.受注日 between '2008/08/29' and '2008/09/01' を別々に出したいのですが。 このように分けて追加したいんでですが、思うようにいかない 教えてください  下記のSQLは今作成中のものです。 お願いします 端末番号 受注番号 セット品受注番号 ・・・・・・受注日 受注日1 ----------------------------------------------------------------------------- 1 2312312 NULL 2008/08/29 2008/09/01 1 3423343 NULL 2008/08/29 2008/09/01 1 5435443 NULL 2008/08/29 2008/09/01 1 5435435 NULL 2008/08/29 2008/09/01 1 5435435 NULL 2008/08/29 2008/09/01 1 5453454 NULL 2008/08/29 2008/09/01 insert into 受注月報( 端末番号,受注番号, セット品受注番号,受注伝票区分, 得意先番号,納入先番号,受注日, 最終出荷日,品目番号, 品目名,形式,品目分類,注文番号,製番, 品目区分,売上担当者,出荷予定日, 出荷予定変更前日, 納期,受注数,単価単位, 単位番号,単位名,引当数, 単価,仮単価区分,金額,特記事項1, 特記事項2,出荷数, 完納区分,計画必要数, 計画立案済数,生産計画日, 地区番号,県番号,製造日程有無区分, 照会項目,登録日,更新日,消費税率, 通貨,通貨名,他社品番, 工場番号,引当在庫場所,納入先名, 郵便番号,住所1,住所2, 相手先担当者,電話番号,FAX番号, 輸送LT,図番,運送店, 相手販売店,得意先担当者名, 納入先担当者名,原価, 原価仮単価,営業価格, 営業価格仮単価,取引先略名,担当者番号, 担当者名,区分明細名, 区分明細名1,区分明細名2,取引先略名1,取引先名称) select '1', 受注残.*, 取引先.取引先略名, 担当者.担当者番号, 担当者.担当者名, 区分明細.区分明細名, 区分明細1.区分明細名, 区分明細2.区分明細名, 取引先1.取引先略名 as 取引先略名1, 取引先2.取引先名称 as 取引先名称 from 受注残 LEFT JOIN 取引先 on 受注残.得意先番号 = 取引先.取引先番号 LEFT JOIN 担当者 on 受注残.売上担当者 = 担当者.担当者番号 LEFT JOIN 区分明細 On ( 受注残 .受注伝票区分 = 区分明細.区分明細番号) LEFT JOIN 区分明細 as 区分明細1 On (受注残.仮単価区分 = 区分明細1.区分明細番号) LEFT JOIN 区分明細 as 区分明細2 On (受注残.完納区分 = 区分明細2.区分明細番号) LEFT JOIN 取引先 as 取引先1 on (受注残.得意先番号 = 取引先.取引先番号 ) LEFT JOIN 取引先 as 取引先2 on (受注残.得意先番号 = 取引先.取引先番号 ) where ('00001' = '99999' OR ('00001' <> '99999' AND 受注残.工場番号 = '00001')) and 受注残.受注日 between '2008/08/29' and '2008/09/01' AND (区分明細.区分番号 = '01' Or 区分明細.区分番号 Is Null) AND (区分明細1.区分番号 = '40' Or 区分明細1.区分番号 Is Null) AND (区分明細2.区分番号 = '10' Or 区分明細.区分番号 Is Null) AND 取引先1.取引先番号 = '00001' AND 取引先2.取引先番号 = '00001' AND 取引先.得意先番号 = '12' --出力順 order by 受注残.工場番号, 受注残.得意先番号, 受注残.品目番号, 受注残.受注日, 受注残.受注番号

  • access2007 VBA データの抽出SQLがわかりません。

    access2007 VBA データの抽出SQLがわかりません。 下記のように記述しているのですが、Aテーブルから必要なデータが抽出できません。どなたかご教授いただけますか。 ※ 「Me.txtSEQ前.Value」「Me.txtSEQ後.Value」はテキストコントロールです。プロパティでの書式設定は何もしていません。 ========================================= Dim intSEQ前 As Long Dim intSEQ後 As Long 'テキストコントロールなので、数値型にする。 '分かりやすくするために、ここで定義しています。 intSEQ前 = CLng(Me.txtSEQ前.Value) intSEQ後 = CLng(Me.txtSEQ後.Value) 'データを抽出します 'intSEQ前からintSEQ後に入力された数値を抽出する。 strSQL = "SELECT " strSQL = strSQL & "* " strSQL = strSQL & "FROM Aテーブル " strSQL = strSQL & "WHERE 県コード=1 " strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " strSQL = strSQL & "ORDER BY SEQ " Set objRs = myDB.OpenRecordset(strSQL, dbOpenSnapshot) ※下記をコメントアウトするとデータは正しく抽出されているようです。 strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " 以上。よろしくお願い致します。

  • SQLが分かりません

    SQLの初心者です。 ACCESSで売上げ管理をしようと考えています。 売上げに関するテーブルは以下のようになっています。 ●売上げヘッダ テーブル   伝票番号(キー)   売上日   売上げ金額    : ●売上げ明細 テーブル   伝票番号(キー)   枝番(キー)   商品コード   商品名   単価   数量   値引金額    : 値引金額は商品ごとに決まり、値引きしなければ0が、値引きがあればその金額が入ります。 売上げ一覧を表示する時に、以下のようなイメージで、 ワークテーブルを作って、値引きがあれば「あり」と画面に表示させたいのです。 ※無い時は何も表示させません 伝票番号  売上日  売上げ金額 値引き有無 9999 2004/1/1 10,000 10000 2004/1/2 1,500 あり 10001 2004/1/2 20,000 10002 2004/1/3 18,900 10003 2004/1/4 23,500 あり 1回のSQLで実行したいのですが、SQLには詳しくないので、 どのように書けばよいか分かりません。 よろしくお願いします。 値引き区分が無ければ、売上げヘッダを見るだけなのですが、 値引きがあるかどうかは、売上げ明細まで見なければいけないので、 SQLの書き方が分からないのと、以下のようなワークテーブルを 作る必要があると思うのですが、どうなのでしょうか。 ●ワーク テーブル   伝票番号   売上日   売上げ金額   値引き区分

  • SQL文ニ関して

    下記の3つのテーブルから下記フィールドを結合するSQL文を教えてください。 条件 ※SQL*PLUSを使用 ※店舗コードと営業日は共通(フィールドCDは別名) ※掛金額・商品券金額・クレジット金額はそれぞれフィールド数が10個(種類別) ※掛金額・商品券金額・クレジット金額はそれぞれ10個のフィールドを合計し  その合計したフィールドのみを表示させる。別名をつける。 ※必要な店舗コードのみを抽出する。  ※エディタにSPOOLする。 テーブル(1) フィールド名 1 店舗コード 2 営業日 3~12 掛金額 13~22 商品券金額 23~32 クレジット金額 テーブル(2) フィールド名 1 店舗コード 2 営業日 3 現金売上金額 テーブル(3) フィールド名 1 店舗コード 2 営業日 3 現金過不足 宜しくお願いします。

  • SQLについての質問

    教えてください!! テーブルAに商品の売上情報(JANコード、売上金額、売上日)、テーブルBに商品マスタ情報(JANコード、更新日付、仕入区分、・・・)があります。欲しい情報は「仕入区分=1を満たす特定期間のJANコード別の売上金額合計」です。更新日付は他の商品マスタ情報を変更する都度付与される日付ですが、仕入区分はどの更新日付でも同じJANコードなら同じ値です。従って、単純に「仕入区分=1のJANコードの売上をSUM」で指定すると、重複行が発生し、正確な売上が出ません。例えば「同一JANコードなら最新の更新日付の仕入区分のみ見る」といった条件を加えるにはどのようにすればよいのでしょうか? 具体的なSQL文で教えてもらえると有り難いです。

  • oracle SQL

    売上情報を日別に集計して抽出しようと考えております。 その際に売上が存在しない日のレコードも纏めて抽出したいと考えております。 以下のように日付一覧を副問合せで生成し、left joinすれば良いかと 考えたのですが、結果は売上が存在するレコードしか抽出されません。 下記のSQLでは何が原因で全日付が抽出されないのか分る方がいらっしゃいましたらご教授頂けますと幸いです。 select 売明.商品コード, 売伝.納品日, 月日.全日, -- TO_CHAR(売伝.納品日,'DY') AS 曜日, TO_CHAR(月日.全日,'DD') AS 日, TO_CHAR(月日.全日,'DY') AS 曜日 -- count(売明.商品コード) AS 売上回数 from 売上伝票データ 売伝, 売上明細データ 売明, ( SELECT TO_DATE('20180401', 'YYYYMMDD') + ROWNUM - 1 AS 全日 FROM ALL_CATALOG WHERE TO_DATE('20180401', 'YYYYMMDD') + ROWNUM - 1 <= TO_DATE('20180430', 'YYYYMMDD') ORDER BY 1 ) 月日 where 売伝.納品日 BETWEEN TO_DATE('20180401','YYYY/MM/DD') AND TO_DATE('20180430','YYYY/MM/DD') AND 月日.全日 = 売伝.納品日(+) AND 売伝.売上伝票番号 = 売明.売上伝票番号 AND 売明.商品コード = '009405'

  • [Excel ADO]合計額の挿入は可能ですか?

    Excel2007のADOを使ってCSVファイルのデータを集計する方法を習得中です ある業務アプリからエクスポートしたデータなのですが、 売上伝票データ: 伝票日付、伝票番号、取引先名、明細番号、商品名、数量、単価、金額、取引区分、納入先コード 納入先コードテーブル: 納入先コード、納入先名 取引区分が0なら売上、1なら入金(入金伝票の場合納入先コードがNULL) これを集計して売上明細表をつくるとして、 伝票毎に伝票合計額、および納入先名を挿入するようなことが SQL文だけで可能でしょうか?

  • SQL SERVER 店舗毎のTOP10

    表題の件のSQLについてアドバイスお願いいたします。 DB:SQL SERVER 2008 R2 テーブル:売上伝票 カラム 店舗|伝票No|伝票日付|商品CD|商品名|数量|単価|金額(数量x単価) SELECT TOP 10 店舗NO, 商品CD, 商品名, SUM(数量) AS 販売数, SUM(金額)AS 販売金額 FROM 売上伝票 WHERE 伝票日付 BETWEEN [開始日] AND [終了日] GROUP BY 店舗NO,商品CD,商品名, ORDER BY 店舗NO,販売金額 DESC 当然ですが、上記のSQLでは、一番若い店舗NOのトップ10しか抽出できません。 店舗別、販売金額のトップ10を抽出するための、SQL文についてお教えください。