Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2013)
UNIONクエリで文字列の列も集計する方法
投稿日時: 17/06/14 11:56:07
投稿者: hato

お世話になります。
UNIONクエリで商品ごとの、自社在庫と業者在庫の集計を作成しています。
倉庫CDで紐付けた倉庫名を、それぞれ自社在庫場所と業者在庫場所として
追加しようとすると、倉庫CDが文字列のためうまくいきません。
どのようにすれば、自社在庫場所と業者在庫場所を追加できるでしょうか。
何か別の方法などがあれば、ヒントを教えていただけないでしょうか。
どうぞよろしくお願いします。
 
在庫明細M
INNER JOIN 倉庫M
ON (在庫明細M.倉庫CD = 倉庫M.倉庫CD)
を使って、倉庫M.倉庫名を在庫場所として
それぞれ出力したいです。
 
---------------------------------------
現状のSQL
SELECT
       TBL.商品CD
     , SUM(TBL.自社在庫数) 自社在庫数
     , SUM(TBL.自社在庫金額) 自社在庫金額
     , SUM(TBL.業者在庫数) 業者在庫数
     , SUM(TBL.業者在庫金額) 業者在庫金額
FROM
       (
       SELECT
              A.商品CD
            , A.在庫数量 自社在庫数
            , A.在庫金額 自社在庫金額
            , 0 業者在庫数
            , 0 業者在庫金額
       FROM
              在庫明細M A
       WHERE
              ・・・・・・
       UNION ALL
       SELECT
              A.商品CD
            , 0
            , 0
            , A.在庫数量
            , A.在庫金額
       FROM
              在庫明細M A
       WHERE
              ・・・・・・
       ) TBL
 GROUP BY
       TBL.商品CD
 

回答
投稿日時: 17/06/14 13:23:16
投稿者: Suzu

引用:
倉庫CDで紐付けた倉庫名を、それぞれ自社在庫場所と業者在庫場所として
追加しようとすると、倉庫CDが文字列のためうまくいきません。

 
倉庫CD と言うのは、UNIONクエリとどんな関係があるのでしょう。
 
テーブル「在庫明細M」の中に、フィールド「倉庫CD」があり、テキスト型フィールド
テーブル「倉庫M」の中のフィールド「倉庫CD」が、数値型フィールド
(または逆のデータ型)で 連結出来ない
という事でしょうか。
 
CStr関数 等で、データ型を変換する事も可能です。
しかし元々、紐づけの為のフィールドのデータ型がテーブルによって違うのであれば、
それは、テーブル設計の間違いです。
 
同じデータ型に設定しなおしましょう。

投稿日時: 17/06/14 14:10:57
投稿者: hato

早速のご回答ありがとうございます。
 
倉庫CDは在庫明細Mの中にあるフィールドでテキスト型です。
また倉庫Mの倉庫CDもテキスト型です。
 
すいません。ちょっと混乱していたようなのですがSuzuさんのご指摘で整理できました!
倉庫CDを型変換して集計できたとしても、複数年月の在庫の場合、正しい倉庫CDでは
なくなってしまうので、自社在庫と業者在庫はテーブルを分けて抽出して、
INNER JOIN にすればうまくいきそうです。
 
支離滅裂で、本当にお騒がせしてしまい申し訳ありませんでした。
どうもありがとうございました。