• ベストアンサー

ACCESS 選択クエリで演算の結果をJOINする

売上明細テーブルと消費税テーブルを使用して INNERJOINをしたいと思っています。 売上明細の伝票NO DENUMBER(7桁)をInt([DENUMBER]/10)で演算をして、 消費税テーブルの伝票No ATS_ORGNumber(6桁)に結合をして、 税率 ATS_Rateを出力したいと考えています。 一度演算した結果のクエリと再度JOINしたクエリを作成しないと、 駄目なのでしょうか。 サブクエリとか試していますが思うように結果がでません。 何卒、宜しくお願い致します。

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

  • ベストアンサー
回答No.2

> INNER JOINだと問題なくデータが得られますが、(旧税率分のみ) > LEFT JOINだと結合式がサポートされてませんと表示されます。 当方の環境(Win7 Access2010)でシンプルなサンプルを作成して確認してみましたが、問題なく表示されました。 確認したSQL SELECT A.*, B.* FROM A LEFT JOIN B ON (A.[コード] \ 10) = B.[コード]; 原因は他にあるように思えます。 SQLを見てみると、INNER JOIN と LEFT JOIN が混在してますが、その辺の整合性が怪しそうな感じですね。

V02964
質問者

お礼

お手数をお掛けします。 色々と有り難うございます。 SQLビューで表示された内容のINNER JOINの箇所をLEFT JOINに修正しました。 INNER JOINではエラーもなく出力されます。 混在して整合性なのが問題なのでしょうか。 Access側で判断ができないかもしれませんね。 LEFT JOINのクエリーを1本作成すれば解決します。 ただ、INNER JOINの仕方と¥は勉強になりました。 有り難うございました。

その他の回答 (1)

回答No.1

SQLビューにして、そこで変更すれば可能です。 ただし、以降、ザインビューで表示はできなくなります。 例 ・・・ FROM 売上明細 INNER JOIN 消費税 On 売上明細.DENUMBER = 消費税.ATS_ORGNumber となっているのを、 ・・・ FROM 売上明細 INNER JOIN 消費税 On Int(売上明細.DENUMBER / 10) = 消費税.ATS_ORGNumber とします。 ちなみに、 Int(売上明細.DENUMBER / 10) は 売上明細.DENUMBER \ 10 とした方が高速です。(体感できる差が出ることは稀だと思いますが)

V02964
質問者

補足

ご回答、有り難うございます。 助かります。 ¥10に修正して実行しました。 同じ結果が得られました。 INNER JOINだと問題なくデータが得られますが、(旧税率分のみ) LEFT JOINだと結合式がサポートされてませんと表示されます。 売上明細テーブルの対象は16万件、消費税テーブル(旧税率)の対象は500件程です。 SELECT dbo_SALE.DENUMBER, dbo_SALE.DETYPE, dbo_CUSTOMER.CU_SHOPSTYLE, dbo_SALE_M.DMBRAND, dbo_MASTER.MA_OUTLET, Int([DENUMBER]\10) AS 式1, dbo_AdjustTax_S.ATS_Rate, Sum(dbo_SALE_M.DMKINGAKU) AS 計, IIf(([DETYPE]=1),[計],[計]*-1) AS 金額, DSum("[金額]","金額") AS 合計 FROM (((dbo_SALE INNER JOIN dbo_SALE_M ON dbo_SALE.DENUMBER=dbo_SALE_M.DMNUMBER) INNER JOIN dbo_CUSTOMER ON dbo_SALE.DETCODE=dbo_CUSTOMER.CU_CODE) INNER JOIN dbo_MASTER ON dbo_SALE_M.DMHINBAN=dbo_MASTER.MA_CODE) LEFT JOIN dbo_AdjustTax_S ON Int(dbo_SALE.DENUMBER\10)=dbo_AdjustTax_S.ATS_ORGNumber WHERE (((dbo_SALE.DEDATE)>=#4/1/2014# And (dbo_SALE.DEDATE)<=#4/30/2014#) AND ((dbo_SALE.DESLIPFLG)=0)) GROUP BY dbo_SALE.DENUMBER, dbo_SALE.DETYPE, dbo_CUSTOMER.CU_SHOPSTYLE, dbo_SALE_M.DMBRAND, dbo_MASTER.MA_OUTLET, Int([DENUMBER]\10), dbo_AdjustTax_S.ATS_Rate HAVING (((dbo_SALE.DETYPE)=1 Or (dbo_SALE.DETYPE)=2 Or (dbo_SALE.DETYPE)=5) AND ((dbo_CUSTOMER.CU_SHOPSTYLE)<>"06")); ご指摘くださると助かります。 宜しくお願い致します。

関連するQ&A