解決済み

追加クエリ

  • 暇なときにでも
  • 質問No.4542369
  • 閲覧数112
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 24% (75/303)

企業コード_項目構成比_項目ID_分類ID

同じ企業コードで項目ID、1、2、3のどれかに数字がある場合
ない項目を追加したいのですが、どのようにすればよいでしょうか。
(追加する項目構成比は0)

一つの企業コードを分割して表で表すと以下のとおり。
分類ID 項目ID
    1 2 3
1  30 20 50
2  30 70 ※ 
4  ※ 70 30
※の部分に0を追加。

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

  • 回答No.5

ベストアンサー率 73% (1287/1744)

以下の質問との関連ですが、こちらの質問への回答とするのが
相応しい内容と判断しましたので、こちらで回答させて戴きます。
http://oshiete1.goo.ne.jp/qa4532253.html

・必要なデータの配列は、クロス集計クエリと同様。
 但し、データがないものについては空欄ではなく「0」を表示。
・入力/編集に使用するため、実際にはクロス集計クエリは不可。

ということでしたら、「クロス集計クエリを元にした、追加クエリ(又は
テーブル作成クエリ)」で対処するのが、比較的簡単かと思います。

クロス集計クエリで、空白を0に変換(以前の回答):
http://oshiete1.goo.ne.jp/qa4208171.html?ans_count_asc=1

クロス集計クエリからテーブル作成クエリ(以前の回答):
http://oshiete1.goo.ne.jp/qa3734660.html?ans_count_asc=0
お礼コメント
sskj

お礼率 24% (75/303)

クロス集計クエリを元にとは思い付きませんでした。
ありがとうございました。
投稿日時 - 2008-12-15 10:04:01

その他の回答 (全4件)

  • 回答No.4

ベストアンサー率 46% (116/251)

やぁやぁ、ごめん。
補足を求めてみてませんでした。

対象のテーブルを構成TBL
企業コードが一意になる企業TBL
分類のテーブルを分類TBLがあるものと想定して

ちなみに分類TBLには
分類ID,項目ID
9,1
9,2
9,3
と入っているものと仮定をしていますので、他の分類が入っていてもOK

まず単純に企業TBLと分類TBLをCROSS JOINすると

SELECT 企業TBL.企業コード.T2.分類ID,T2.項目ID
FROM 企業TBL
CROSS JOIN (SELECT 分類ID,項目ID FROM 分類TBL WHERE 分類ID=9) AS T2

本来あるべき全レコードが出来ます
これと排他結合し既に存在するレコード以外を挿入してやればよい。

つまり
INSERT INTO 構成TBL(企業コード,分類ID,項目ID,項目構成)
SELECT T1.企業コード,T1.分類ID,T1.項目ID,0
FROM (SELECT 企業TBL.企業コード.T2.分類ID,T2.項目ID
FROM 企業TBL
CROSS JOIN (SELECT 分類ID,項目ID FROM 分類TBL WHERE 分類ID=9) AS T2) AS T1
LEFT JOIN 構成TBL AS T0
ON T1.企業コード = T0.企業コード
AND T1.分類ID = T0.分類ID
AND T2.項目ID = T0.項目ID
WHERE T0.企業コード IS NULL

とすればいかがかな?
Insert文をはずしてクエリーで確認かな?
補足コメント
sskj

お礼率 24% (75/303)

私のやり方が悪いのかFROM句の構文エラーと出ます。
テーブルは以下のようです。

テーブル名:企業マスタ
フィールド_企業コード_社名_住所_等

テーブル名:調査データ(3項目)
フィールド_企業コード_項目構成_分類ID_項目ID_オートナンバー

テーブル名:調査データ(売上構成)
フィールド_企業コード_分類ID_売上構成_オートナンバー

このほかに分類名テーブル_項目名テーブルがあります。

SELECT
FROM 調査データ(売上構成) INNER JOIN (企業マスタ INNER JOIN 調査データ(3項目) ON 企業マスタ.企業コード = 調査データ(3項目).企業コード) ON (企業マスタ.企業コード = 調査データ(売上構成).企業コード) AND (調査データ(売上構成).分類ID = 調査データ(3項目).分類ID);
通常のつなぎ方をするとこうなります。
投稿日時 - 2008-12-12 10:33:27
  • 回答No.3

ベストアンサー率 28% (4468/15891)

他カテゴリのカテゴリマスター
今のレコードのフィールドと、そのデータの実例を挙げてください。
挙げないから意図がわからないという声が出るのだと思う。
ーーーーーーー
また、標題の「追加クエリ」というのは、質問のやりたいことを反映
してないのでは?
本来の意味と違うでしょう。
http://www.seta.media.ryukoku.ac.jp/manual/office/access/query/add_query.html
ーー
回答が出ているように、クロス(集計)クエリではないのか。
そして該当のない部分にも0を表示したいのか。
http://okwave.jp/qa881230.htmlのような質問が有るよ。
補足コメント
sskj

お礼率 24% (75/303)

テーブル
ID(オートナンバー)企業コード_分類ID_項目ID_項目構成
137_13_9_1_35
136_13_9_2_3
185_13_9_3_62
100_14_9_3_100
229_15_9_1_20
228_15_9_2_5
115_15_9_3_75
130_16_9_3_100

企業コード14を質問内容に書いた表に表すと以下のようになります。
[表]
企業コード14
分類ID 項目ID
    1 2 3
9   ※※ 100←構成比

14の場合分類ID9に対して項目ID1,2のレコードがないので以下の様にデータを追加。
企業コード分類ID項目ID項目構成
14 9 1 0
14 9 2 0

※なぜこのようなことがしたいか?
入力フォームを表の形にしたいためです。

[クエリで項目ID3のみ抽出した例]
SELECT ●T_K調査データ(ウエア、シューズ、グッズ).企業コード, ●T_K調査データ(ウエア、シューズ、グッズ).項目構成, ●T_K調査データ(ウエア、シューズ、グッズ).分類ID, ●T_K調査データ(ウエア、シューズ、グッズ).項目ID
FROM ●T_K調査データ(ウエア、シューズ、グッズ)
WHERE (((●T_K調査データ(ウエア、シューズ、グッズ).項目ID)=3));

上記のSQLは項目ID3の抽出例です。以下のようにID1、ID2、ID3を抽出したクエリを結合し、それを元にサブフォームを作ったのですが、ID1、2、3のレコードがそろっていないとすべてが表示されなくなるので、(内部結合のため)追加したいのです。

SELECT nz(テスト1!項目構成) AS 式1, nz(テスト2!項目構成) AS 式2, nz(テスト3!項目構成) AS 式3
FROM (テスト1 INNER JOIN テスト2 ON (テスト1.企業コード = テスト2.企業コード) AND (テスト1.分類ID = テスト2.分類ID)) INNER JOIN テスト3 ON (テスト2.企業コード = テスト3.企業コード) AND (テスト2.分類ID = テスト3.分類ID);

もしこのようなやり方をしなくとも表形式のようなフォームが作れるのでしたらそちらを教えていただきたいのですが・・・。
投稿日時 - 2008-12-10 10:14:48
  • 回答No.2

ベストアンサー率 38% (53/137)

更新クエリですね。
あとはクロス集計してるんでしょうから
値をNzしとくとか
補足コメント
sskj

お礼率 24% (75/303)

質問の詳細は回答1の補足にいたしました。
投稿日時 - 2008-12-10 10:53:29
  • 回答No.1

ベストアンサー率 46% (116/251)

質問内容が理解できません。

現状のテーブル内容と結果として欲しい内容を書いていただければお答えできると思うのですが
補足コメント
sskj

お礼率 24% (75/303)

質問の詳細は回答1の補足にいたしました。
投稿日時 - 2008-12-10 10:56:33
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集

ピックアップ

ページ先頭へ