- ベストアンサー
access の UPDATE のSQL文教えてください
お世話になります。 仕訳抽出 (キー無し)の勘定科目別の金額を勘定科目毎に集計して仕訳集計(キー項目:勘定科目)の金額を更新するSQL文です。 1つ目はOK ですが 2つ目で「構文エラー:演算子がありません」となります。 DoCmd.RunSQL "UPDATE 仕訳集計 set 金額=0 " DoCmd.RunSQL "UPDATE 仕訳集計 " _ & " INNER JOIN 仕訳抽出 ON 仕訳集計.勘定科目 = 仕訳抽出.勘定科目" _ & " SET 仕訳集計.金額 = SUM(仕訳抽出.金額) Group by 仕訳抽出.勘定科目;"
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> DSUMで置き換えても同じエラーが帰ってきます 同じエラーって?「構文エラー:演算子がありません」って事? 出来れば、打ち替えた > DoCmd.RunSQL ~ を、出してみて^^; > 中間ファイルを空にした後合計をインサートして、 > この中間ファイルで仕訳集計を更新すると解決しました。 で、よく判らないんだけど、中間ファイルって?インサートって? > 出来上がったテーブルをEXCELファイルの所定のセルにインポート > したいのです。 多分、MS-Excelのファイルにエクスポート書き出すんだと思うんだけど、テーブルじゃなくて、クエリでも書き出せるよ? おそらくだけど、「仕訳集計」の「勘定科目」が「仕訳抽出」から書き出される「勘定科目」と数が一致しないとか、その前に「削除クエリ」で、「仕訳集計」のレコードを削除して、「仕訳抽出」から「勘定科目」をグループ化で「追加クエリ」を動作させて、「更新クエリ」で、「金額」を集計してと・・・すごい手間掛けてるような気がするんだけど?それとも「勘定科目」ってものは、変動しないものなのかな?
その他の回答 (3)
- Dxak
- ベストアンサー率34% (510/1465)
#2です すみません、もう1つ忘れてました>< クエリのデータを編集する http://office.microsoft.com/ja-jp/access/HA100978761041.aspx?pid=CH100645771041 の「クエリのデータを編集できない状況」をお読みください > ・クエリで GROUP BY 句を使用している場合。 と、言う事で「データを編集できないクエリ」で更新クエリは動作しません だから、UpDate文のSQLに「GROUP BY 句」が文法上存在しません これは、サブクエリで集計して更新を掛けるという手も使えません 別のクエリにすれば、動作可能です・・・確かね^^;
補足
回答有難うございます。 DSUMで置き換えても同じエラーが帰ってきます 「計算可能な物をテーブルに保持すると言う手は、あまりお勧めじゃありませんが」 仰るとおりですが、出来上がったテーブルをEXCELファイルの所定のセルにインポートしたいのです。 中間ファイルを空にした後合計をインサートして、この中間ファイルで仕訳集計を更新すると解決しました。 しかしすっきりしません。締め切りを保留にしておきますので他にお気づきでしたら宜しくお願いします。
- Dxak
- ベストアンサー率34% (510/1465)
そもそも論で・・・ UPDATE ステートメント http://office.microsoft.com/ja-jp/access/HA012315231041.aspx?pid=CH100728991041 で、あるようにUpDateのSQLで、「Group by」が使えた記憶が無いのです 手としては、 > UPDATE 仕訳集計 > INNER JOIN 仕訳抽出 ON 仕訳集計.勘定科目 = 仕訳抽出.勘定科目 > SET 仕訳集計.金額 = SUM(仕訳抽出.金額) Group by 仕訳抽出.勘定科目; の部分を集合関数DSumで置き換えて > UPDATE 仕訳集計 > SET 金額 = DSum("金額","仕訳抽出","[勘定科目]=" & [勘定科目]); 当りに変更するのが手としては、べたなのだと思いますが、計算可能な物をテーブルに保持すると言う手は、あまりお勧めじゃありませんが^^;
- wolf03
- ベストアンサー率22% (241/1086)
結合でGroup byを使っているからです。 Group byを使う側をサブクエリとして先に集計してから結合する物です。
補足
クエリを作成してやってみましたが「更新可能なクエリであることが必要である 」となってダメでした。 クエリは次のように作成しました。 SELECT 仕訳抽出.勘定科目, Sum(仕訳抽出.金額) AS 金額合計 FROM 仕訳集計 RIGHT JOIN 仕訳抽出 ON 仕訳集計.勘定科目 = 仕訳抽出.勘定科目 GROUP BY ACC仕訳抽出.勘定科目;
補足
DSUMについては削除してしまいましたので、勝手ですが今回はあきらめます。 中間ファイル云々については報告がExelの勘定科目毎の行位置が指定されているためデータあってもなくても全ての勘定科目をエキスポートするためにご推察の通りのことをやっています。 これもクエリー内での結合の種類の変更とグループ集計で可能なことを確認しました。 最後までお付き合い有難うございました。