こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESS2010 SQL 結合キーについて

お世話になります。拙い文面ではありますがよろしくお願いいたします。

Vista ACCESS2010を使用しています。
下記SQLで2個のテーブルを外部結合していますが、テーブルの一方で結合で使用しているフィールドの桁が変更になり、テキスト型のフィールドを0埋めして外部結合しようとしています。フィールドを関数で桁揃えして結合キーとして使用することはできないものでしょうか。

---売上金額----------
対象月 テキスト型
商品ID テキスト型
商品名 テキスト型
支店CD テキスト型
金額  通貨型

支店CD 3ケタ→5ケタへ変更


---支店マスタ--------
支店CD テキスト型
支店名 テキスト型
支店ソート番号 数値型

支店CD 3ケタ・・・売上金額の支店CD変更に伴い、Format等で5ケタへ変更したい

---変更前-----
SELECT a.商品ID,a.商品名,a.支店CD,b.支店名,b.支店ソート番号,a.金額
FROM 売上金額 a LEFT JOIN 支店マスタ b
ON a.支店CD = b.支店CD
WHERE a.対象月 >=#2013/04/01# AND a.対象月 <=#2013/07/31#
GROUP BY a.商品ID,a.商品名,a.支店CD,b.支店名,b.支店ソート番号,a.金額

---以下へ変更---
SELECT a.商品ID,a.商品名,Format([支店CD],"00000"),a.支店名,支店ソート番号,a.金額
FROM 売上金額 a LEFT JOIN 支店マスタ b
ON a.支店CD = b.支店CD   
WHERE a.対象月 >=#2013/04/01# AND a.対象月<=#2013/07/31#
GROUP BY a.商品ID,a.商品名,Format([支店CD],"00000"),a.支店名,b.支店ソート番号,a.金額

変更後の ON以下を次のように変更するとJOINでサポートされていませんのエラーとなります。
ON Format([a.支店CD],"00000") = b.支店名 

都合上フィールドとテーブル名は変更していますがそれ以外は変わりません。
よろしくお願いいたします。

投稿日時 - 2013-08-24 14:18:51

QNo.8233635

困ってます

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

最も簡単な対応は、[支店マスタークエリ]を作成されることです。そのクエリで、列[新支店CD]を生成されると目的は達成されます。

※本来は、支店コードという可変なデータ列ではなく長整数の一意な数字を主キーに。もちろん、列[支店コード]はあっても構いません。が、それは、あくまでも表のデータ。リレーションを内部管理するキーとしては不適です。

投稿日時 - 2013-08-24 16:41:12

お礼

ご回答ありがとうございます。おっしゃられる通り新支店CDクエリを作成し、最小限の変更ですみました。ありがとうございます。ご指摘の通り「長整数の一意名数」での支店コードが存在していたのでこれを基に「支店コード」を作成するようにしていく予定です。リレーションを内部管理するとしては確かに不適ですね。リレーションの理解が浅かったことからマスタとしてはよくない作りになっていたのですね。ご指摘、ご教授ありがとうございました。

投稿日時 - 2013-08-24 18:41:30

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

よく分かりませんが、支店コード桁数が変更されたのなら、既存のコードを更新クエリーでFormat関数を用いて、3桁から5桁に書き換えてしまった方がいいと思います。
3桁のコードをそのまま残しておく必要があるのでしょうか?

投稿日時 - 2013-08-24 15:56:19

お礼

おっしゃれらる通りです。ただコードをいましばらく残しておく必要があり、やむを得ずこのような対応で苦慮しています。ご回答ありがとうございした。

投稿日時 - 2013-08-24 18:34:28

あなたにオススメの質問