- ベストアンサー
追加クエリ
企業コード_項目構成比_項目ID_分類ID 同じ企業コードで項目ID、1、2、3のどれかに数字がある場合 ない項目を追加したいのですが、どのようにすればよいでしょうか。 (追加する項目構成比は0) 一つの企業コードを分割して表で表すと以下のとおり。 分類ID 項目ID 1 2 3 1 30 20 50 2 30 70 ※ 4 ※ 70 30 ※の部分に0を追加。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
以下の質問との関連ですが、こちらの質問への回答とするのが 相応しい内容と判断しましたので、こちらで回答させて戴きます。 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
その他の回答 (4)
- noah7150
- ベストアンサー率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文をはずしてクエリーで確認かな?
補足
私のやり方が悪いのかFROM句の構文エラーと出ます。 テーブルは以下のようです。 テーブル名:企業マスタ フィールド_企業コード_社名_住所_等 テーブル名:調査データ(3項目) フィールド_企業コード_項目構成_分類ID_項目ID_オートナンバー テーブル名:調査データ(売上構成) フィールド_企業コード_分類ID_売上構成_オートナンバー このほかに分類名テーブル_項目名テーブルがあります。 SELECT FROM 調査データ(売上構成) INNER JOIN (企業マスタ INNER JOIN 調査データ(3項目) ON 企業マスタ.企業コード = 調査データ(3項目).企業コード) ON (企業マスタ.企業コード = 調査データ(売上構成).企業コード) AND (調査データ(売上構成).分類ID = 調査データ(3項目).分類ID); 通常のつなぎ方をするとこうなります。
- imogasi
- ベストアンサー率27% (4737/17069)
今のレコードのフィールドと、そのデータの実例を挙げてください。 挙げないから意図がわからないという声が出るのだと思う。 ーーーーーーー また、標題の「追加クエリ」というのは、質問のやりたいことを反映 してないのでは? 本来の意味と違うでしょう。 http://www.seta.media.ryukoku.ac.jp/manual/office/access/query/add_query.html ーー 回答が出ているように、クロス(集計)クエリではないのか。 そして該当のない部分にも0を表示したいのか。 http://okwave.jp/qa881230.htmlのような質問が有るよ。
補足
テーブル 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); もしこのようなやり方をしなくとも表形式のようなフォームが作れるのでしたらそちらを教えていただきたいのですが・・・。
- umazanpai
- ベストアンサー率38% (53/137)
更新クエリですね。 あとはクロス集計してるんでしょうから 値をNzしとくとか
補足
質問の詳細は回答1の補足にいたしました。
- noah7150
- ベストアンサー率46% (116/251)
質問内容が理解できません。 現状のテーブル内容と結果として欲しい内容を書いていただければお答えできると思うのですが
補足
質問の詳細は回答1の補足にいたしました。
お礼
クロス集計クエリを元にとは思い付きませんでした。 ありがとうございました。