• ベストアンサー

ACCESS 教えて下さい

前も似たような質問をしたのですがうまく応用が出来なかったので再度ご教授お願い致します。 テーブルA 商品NO SS  S   A   B   C A001  1000 2000 3000 4000 5000 A002   500 700 800  900 950 A003  1500 2500 3000 4500 5500 テーブルB 会社名 会社ランク AAA  SS BBB  S CCC  A があります。 二つをくっつけて受注管理のクエリをつくりました クエリA 購入日 会社名 会社ランク 商品NO 金額 この中で AAAの会社がA001の商品を買ったら金額欄に1000 BBBの会社がA002を買ったら  700 と表示させたくて、 クエリAの金額欄に 金額: IIf([会社ランク]=A,(SELECT A FROM テーブルA WHERE 商品No = 商品No),IIf([会社ランク]=SS,(SELECT SS FROM テーブルA WHERE 商品No = 商品No),IIf([会社ランク]=S,(SELECT S FROM テーブルA WHERE 商品No = 商品No),0))) としたのですが、できません。 間違いのご指摘と、どうすればよいかを教えて下さい。 宜しくお願い致します。

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

  • ベストアンサー
  • mako_sea
  • ベストアンサー率47% (62/130)
回答No.2

とりあえず質問から読み取れる条件式は クエリーで表示するためには以下になると思います。 (フィールドとテーブル名が同じものがあり  わかりにくくなるのでテーブル名を少し変更しました) 金額:iif( [テーブルB]![会社ランク] ="A", [テーブルA]![A], (iif([テーブルB]![会社ランク]="SS", [テーブルA]![SS], iif([テーブルB]![会社ランク] ="S",[テーブルA]![S],0)))) 式ビルダで作るならselect文を入れる必要はないと思います。 ※蛇足ながら、 購入日や金額を格納する受注用の別テーブルが必要な気がするのですが、 そこは質問内で触れていないだけなのでしょうか。

meatoffice
質問者

お礼

迅速なご返答ありがとうございます。 教えていただいたようにして、できました! >購入日や金額を格納する受注用の別テーブルが必要な気がするのですが、 そこは質問内で触れていないだけなのでしょうか。 ご指摘の部分ですが、省略していました。 あまりきちんとした説明ができてなかったのに、的確なご返答いただけて本当に助かりました。 ありがとうございました。

その他の回答 (1)

noname#140971
noname#140971
回答No.1

単なる服飾デザイナでプログラマじゃないです。 ですから、複雑なクエリなんて考えるのは好きじゃないです。 そこで、簡単に単一 Select文で実現する方法のみで全体を考えます。 この場合、 <商品マスター> ID__品名 1___A001 2___A002 <単価表> 商品マスター_ID__単価区分___単価 ___________________1____________1___1000 ___________________1____________2___2000 ___________________1____________3___3000 ___________________1____________4___4000 ___________________1____________5___5000 ___________________2____________1___500 ___________________2____________2___700 ___________________2____________3___800 ___________________2____________4___900 ___________________2____________5___950 <取引先> ID__名称__適用単価区分 1___AAA__________________1 2___BBB_________________2 このように、[単価区分]は整数かバイトで十分です。 次のように表示するのは Access の得意技ですから・・・。 商品マスター_ID__単価区分__単価 ___________________1__SS___________1000 ___________________1__S_____________2000 ___________________1__A_____________3000 ___________________1__B_____________4000 ___________________1__C_____________5000 さて、このような設計ですと<簡単に単一 Select文で>が実現できます。 次は、質問にある単価 1000と700を検索した結果です。 [イミディエイト] ? DBLookup2("SELECT 単価 FROM 単価表 WHERE 商品マスター_ID=1 AND 単価区分=1") 1000 ? DBLookup2("SELECT 単価 FROM 単価表 WHERE 商品マスター_ID=2 AND 単価区分=2") 700 複雑に考えないでシンプルが一番ですよ!

meatoffice
質問者

お礼

早々のご回答ありがとうございます。 イミディエイトの書き方がまだ分からない初心者なので、教えていただいたやり方はできなかったのですが、勉強させていただきました。 ありがとうございました。

関連するQ&A

  • アクセスについて

     *テーブルB    *テーブルA      店番←------販売店番号       店名       商品番号                 販売金額    *テーブルC             商品番号----→商品番号            詳細       商品名            販売日      手数料 リレションシップをしております。 クエリA 店名-商品番号-販売金額-商品名-詳細-手数料金額-販売日 といったクエリをつくりました。 ---------OKウェーブさんからの回答--------------- 「商品」テーブルに 店名 - 商品 - 金額 A店 - 宝石 - 1000 B店 - 時計 - 2000 A店 - 宝石 - 3000 B店 - バック - 4000 ・・・ と格納されているとします で、これらを集計する為に使用するものは、選択クエリ(集計)を使用します 下記にクエリのSQL文を記述します SELECT 商品.店名, Sum(IIf([商品名]="宝石",[金額],0)) AS 宝石合計, Sum(IIf([商品名]="その他",[金額],0)) AS その他合計, Sum(商品.金額) AS 合計, Sum(IIf([商品名]="バック",[金額],IIf([商品名]="時計",[金額],0))) AS 合計A, Sum(IIf([商品名]="その他",[金額],IIf([商品名]="宝石",[金額],0))) AS 合計B FROM 商品 GROUP BY 商品.店名 ORDER BY 商品.店名; ------------------------------------------------- どこの画面でSQL文を記述すえばよろしいのでしょうか。 どこかわかりやすいHPはないでしょうか お願いします。

  • 重複データからの取得方法を教えてください

    id s_no s_name ---------------- 1 001 aaaa 2 005 bbb1 3 005 bbb2 4 002 cccc 5 005 bbb3 6 005 bbb4 上のものがテーブルの内容です。取得したい結果が ---------------- 1 001 aaaa 4 002 cccc 5 005 bbb3 です。 試したSQLは select distinkd on (s_no) id,s_name from shain where id>=5 order by id desc select id,s_no,s_name from shain where id>=5 group by s_no order by id desc などです。 データベースがmdbなのでdistinkd onは使えませんでした。 もしかすると書式が違うのでしょうか?

  • Access クエリ

    INSERT INTO テーブルA SELECT * FROM テーブルB WHERE (フィールド1= 値を入力してください); 上記のような追加クエリがあります。 実行するとインプットボックスが表示されますが、 メッセージを改行して2行表示することは出来ませんか?

  • ACCESSのSQLの書き方

    ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)

  • SQLの構文

    以下のように、データの存在と共に名前まで一度に取得 できるクエリの書き方って存在しますか? select count(*), namae from a_class where no='1'; 通常は select count(*) from a_class where no='1'; として、1件ならば、 select namae from a_class where no='1'; で取得しますが。 DBはPostgreSQLです。perlのDBIを利用しています。

  • access で結果の出るSQLが、MySQLではできなくて困っていま

    access で結果の出るSQLが、MySQLではできなくて困っています。 普段、ちょっと古いですが、Access2002を使用しています。 どうしても、Linuxサーバー上でデーターベースを利用する必要がでて、Fedora13に、mysql 5.1.48 をyamでインストールしました。 ところが、必要なSELECT検索が出来ず、困っています。 次のようなテーブル構造だと思ってください。 table A id|No ---- a1|01 b1|11 c0|20 table B No|option1|option2 ---------- 01|L   |Red 01|S   |Red 01|L   |Green 01|S   |Green 11|S   |(値なし) 11|L   |(値なし) このNoとオプション1、2から、IDを割り出したしたいのです。 オプション1,2は、存在していないデータもあります。 Accessなら、table A の No と table Bのoption1、option2 を &で結んで、結合プロパティをtable Aの全レコードに指定したSQL SELECT A.id, [A].[No] & [B].[option1] & [B].[option2] AS test FROM A LEFT JOIN B ON A.[No] = B.[No] WHERE ((([A].[No] & [B].[option1] & [B].[option2])="01LRED")); とすれば、a1 と結果が返ります。 table B にオプション値の登録のないものでも、 SELECT A.id, [A].[No] & [B].[option1] & [B].[option2] AS test FROM A LEFT JOIN B ON A.[No] = B.[No] WHERE ((([A].[No] & [B].[option1] & [B].[option2])="20")); とすれば、C0が返ってくれます。 ところが、同じテーブル構成をMySQLに作成し、 SELECT A.id, A.No & B.option1 & B.option2 AS test FROM A LEFT JOIN B ON A.No = B.No WHERE A.No & B.option1 & B.option2 = "01LRED"; を入力してみましたが、結果が出ません。 エラーらしきものといえば、 Empty set, 5 warnings (0.00 sec) が表示されています。 結合の方法が違うのかと思い、Googleで調べ SELECT concat(A.id, A.No & B.option1 & B.option2) AS test FROM A LEFT JOIN B ON A.No = B.No WHERE (A.No & B.option1 & B.option2) = "01LRED"; と、concat を使ってみましたが、だめでした。 MySQLで、上記のように複数のテーブル/フィールドを結合して、その値をもとに検索することはできないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • AccessのクエリでvbLfのみ抽出するには

    Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。

  • ACCESSの更新クエリー活用方法の件(続き)

    ID 商品 価格 備考  フラグ という列をもつテーブルがあるとします。 こちらは、 テーブル名:商品名 としています。 これにたいして選択クエリーを使って、特定の商品だけを クエリーで引っ張ってきています。 クエリー名:抽出 このクエリー名:抽出で引っ張ってきたデータにあるフラグの列に「更新クエリー」で 1の数値を入れたいのですが、 それは更新クエリーでどのようにSQLをせっていするかたちになりますか。 更新クエリー名:更新 update 抽出元のテーブル set 任意のセル = 1 where 抽出の条件 update 商品名 set フラグ = 1 where 抽出 ; 上記方法、更新クエリーで上記SQLを設定しても、クエリー実行時に、 バラメータを要求され、結果 全てのテーブル列に1がふられます。 式が違うのでしょうか。あくまでもクエリーで抽出されたものだけに 1をふりたいのですが。 http://okwave.jp/qa/q7278856.html > http://okwave.jp/qa/q7277790.html の#1・#2です。 #1に「選択クエリは作れますか?」と書いたのをほったらかしにして、続きの質問とは・・・。 具体的なテーブル名・列名を提示してないので、イメージで書いてあるんだから 回答を丸写ししちゃダメでしょ。 > #1です。ごめんなさい。もっとシンプルに考えれば良いです。 デザインビューにしてSQLビューに切るかえる。 select 列 from 抽出元のテーブル where 抽出の条件 ; みたいなデータです。 where の前を書き換えます。 select 列 from 抽出元のテーブル の部分を update 抽出元のテーブル set 任意のセル = 1 としてください。

  • バラメータクエリVBAで実行

    アクセス初心者です。 バラメータクエリの変数をVBAで渡すにはどうしたらよいでしょうか? 例えば、テーブル1に、NOフィールド(1から100程度の整数)と、価格フィールドがあります。 以下のパラメータクエリをアクセスVBAで実行したいのですが、どう書けばよいでしょうか?(抽出条件 NO=IのIをVBAで定義して結果テーブルに保存) '--------------------------------------------------------------- 'VBAで実行したいパラメータクエリ 'SELECT テーブル1.[NO], テーブル1.価格 INTO 結果テーブル 'FROM テーブル1 'WHERE (((テーブル1.[NO])=[I])); '--------------------------------------------------------------- Dim I As Integer I=3 Dim mySQL As String mySQL = "SELECT テーブル1.[NO], テーブル1.価格 INTO 結果テーブル FROM テーブル1 WHERE (((テーブル1.[NO])=[I]));" この後を教えて下さい。

  • すっきりとしたSQL文にしたいのですが

    Oracle9iにてテーブルのデータを更新しようと思っています。 目的としてはAAAのカラムa1とBBBのカラムb1が同一なレコードである場合、 AAAのa2にBBBのb2を更新したいのですが、 <条件> AAA:テーブル1 BBB:テーブル2 a1:CHAR b1:CHAR a2:VERCHAR b2:VERCHAR すべて必須で桁数は10 UPDATE AAA SET AAA.a2 = ( SELECT BBB.b2 FROM BBB WHERE AAA.a1 = BBB.b1) WHERE AAA.a1 = ( SELECT BBB.b1 FROM BBB WHERE AAA.a1 = BBB.b1) ; いまはこんな無駄の多そうなSQLしか分かりません。 この他にも条件が2つ追加される予定なので もっとすっきり更新できる方法を教えていただけませんでしょうか? よろしくお願いします。