• ベストアンサー

1つのフィールドに複数値を設定した場合の抽出方法

ACSESS97を使用しています。 フィールドに複数の値を区切り文字を用いて設定した場合に、SQLを用いて抽出することは可能でしょうか? 注文番号  品物   1   りんご;みかん   2   たまご   3   みかん;たまご この場合、品物に”みかん”が含まれている行を抽出するにはどのような方法があるのか教えてください。

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

品物に含まれるのが2つ以下限定ならできますね 先ずクエリで品物を2つのフィールドに分けます 前: IIf(InStr([品物],";")<>0,Left([品物],InStr([品物],";")-1)) 後: Mid([品物],InStr([品物],";")+1) 注文番号 品物       前    後 1 りんご;みかん  りんご  みかん 2 たまご      たまご 3 みかん;たまご  みかん  たまご このクエリからユニオンクエリを作成します SELECT sutonaQ.注文番号, sutonaQ.前 FROM sutonaQ WHERE (((sutonaQ.前) Is Not Null)) union SELECT sutonaQ.注文番号, sutonaQ.後 FROM sutonaQ WHERE (((sutonaQ.後) Is Not Null)) 注文番号 前 1    みかん 1    りんご 2    たまご 3    たまご 3    みかん

sutonarini
質問者

お礼

ありがとうございます。 助かりました。 参考にさせていただきます。

その他の回答 (2)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

Likeが使えないとなると区切り文字で分解してひとつずつ比較するようなVBAコードを組むしかないですね 当然クエリは使えません、VBAで1レコードずつ処理していくことになります テーブルがデータベースの原則を外しているのですから面倒なことになるのは自業自得です

sutonarini
質問者

お礼

回答ありがとうございます。 VBから参照するので、ロジックを組むのは構わないのですが、 実際はフィールドが複数存在し、抽出条件も複数あるため、なるべくSQLで処理を共通化できたら良いなあと思っていた次第です。 Likeで抽出して、抽出したものに問題がないかあとからチェックをかけるのが一番シンプルなのでしょうかね。 クエリ等で複数値をばらせることができる方法があれば、 良いのですが・・・。 注文番号  品物   1   りんご   1   みかん   2   たまご   3   みかん   3   たまご こんな感じに変更できれば、一番良いのですが、 何か方法はないでしょうか。

  • ace456
  • ベストアンサー率36% (37/102)
回答No.1

以下のSQLを試してみてください -------------- select 注文番号 ,品物 from テーブル名 where 品物 Like "*みかん*" -------------- 補足 欠点は、商品名に「みかんジュース」なんかがあった場合もひっかかることです。 解消するにはテーブルに項目を追加し、 注文番号、注文毎明細番号、品物 などの構成にするとよいでしょう。 SQLで対応できなくもないですが鬱陶しい条件になります。

sutonarini
質問者

お礼

回答ありがとうございます。 テーブルの構成と内容は私が決めることができないので、 「みかんジュース」がひっかかるとなるとワイルドカードを使用するのは難しいです。 少々鬱陶しくても確実に「みかん」が含まれている行を取り出したいのですが、何か方法はないでしょうか?

関連するQ&A

  • レコードの文字列をフィールド抽出のクエリとして指定

    レコードの文字列として リンゴ ミカン イチゴ となっていたときに、この3つを別のテーブルにあるフィールド名のリンゴ、ミカン、イチゴのみを抽出するクエリをVBAで指定できますか?

  • 【Access2000】抽出条件の設定について

    Access2000の抽出条件について質問です。 下記のようなテーブルがあります。 番号が3桁、5桁のものが混在しています。 ※3桁、5桁以外のものはありません。 キー | 番号 | 名前 001 | 11029 | りんご 002 | 332 | みかん 003 | 10154 | ばなな 番号を加工する条件として、 A. 5桁の場合、頭から2桁目から3桁の値を取る B. 3桁の場合は、そのまま値を取る があります。 フィールドの記述は A. 番号加工後: Mid(Left([番号],2) ,3) というところまでは分かりました。 上記の条件をもとにクエリで実行したいのですが、抽出条件はどのように書けばよろしいでしょうか? 識者の方、ご教示いただけますと幸いです。

  • 一つのテーブルの複数のフィールドから抜き出す方法について

    一つのテーブルの複数のフィールドから抜き出す方法について 例えば下記のようなテーブルがあったとします。       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル C商店  イチゴ   パイナップル バナナ D商店  イチゴ   バナナ   りんご のようなテーブルがありフィールド1~4いずれかにみかんを含むクエリーを作成し次のような結果をACCESSで作成したいのですが、簡単な方法はあるのでしょうか?       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル よろしくお願いいたします。 尚、使用しているデータベースはACCESS2000です。

  • ACCESSで、"***"を含むデータを抽出したい

    宜しくお願い致します。 あるフィールドに、"***りんご"、"***みかん"といったように 文字の頭にアスタリスクを含んでいる文字があります。 アスタリスクを含んでいない、"りんご"、"みかん"のような 純粋な文字もあります。 クエリを作成して、頭にアスタリスクが付いている文字だけ抽出したいのですが、Accessだと*印=オールマイティと見なされてしまい、データの抽出ができません。 なにか良い方法はありますでしょうか。。。 宜しくお願い致しますm(__)m

  • エクセルで値を指定しての検索が出来ない場合の同じ値のセルをすべて抽出す

    エクセルで値を指定しての検索が出来ない場合の同じ値のセルをすべて抽出する方法 エクセルのA列に上から順に A1みかん A2リンゴ A3みかん A4パイナップル A5マンゴー A6みかん A7パパイヤ A8リンゴ A9バナナ A10グレープフルーツ A11みかん A12レモン という具合に1000行くらいあって同じ値のみを抽出する方法を教えてください。 上記の場合 A1みかん A3みかん A6みかん A2リンゴ A8リンゴ という具合に表示してほしい。 同じ値の行は最大3つ(3種類×3行)、又は2つ(2種類×2行)です。 後の980行くらいはそれぞれ値が違います。 また同じ値が何で有るのかも不明です。 上記例ではみかんとリンゴですが、そうだとは限りません。 レモンかもしれないし、マンゴーかもしれない。 またその1000行の中の値の種類も何種類あるのか不明です。 最悪1000種類で重複は無いかも知れない。 よって値を指定しての検索は出来ません。 ソートして昇順にとかにすれば同じ値は上下に並びますが 実際には、みかん とかではなく英数字20ケタなので目で見ただけで 上下に並んでいるのは見つけれません。 12A3456D620X834F7623 14B63795V63879576235 167353F46856G6983639 167353F46856G6983639 16C342D374A755C65833 1000行の中からこのように上下が同じ値の行を見つけるのは難しいです。 簡単に発見する方法はありますか?

  • (excel)値が連続していた場合、削除してしまうマクロ

    ある列で、値(文字)が連続していた場合、 一番上の行のみ残し、他の行を削除 そして、番号を*-*と合体させたいのですが、、、 マクロをつかわなきゃいけないと思うんですけど 勉強中でなかなか完成できません! どなたかレクチャーお願いします! (例) 1 りんご 2 りんご 3 みかん 4 みかん 5 みかん 6 もも 7 もも  ↓ 1-2 りんご 3-5 みかん 6-7 もも

  • 行数をカウントするSQLにつきまして

    行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから りんご=3(行) みかん=2(行) メロン=1(行) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 1     りんご 100 2     りんご 100 3     りんご 100 4     みかん 150 5     みかん 150 6     メロン 250

  • 等比数列で複数表現する一般的な呼称

    1フィールドに2の乗数の等比数列を値として適用すると、下記例のように複数フィールドを使用せずに、1つの値で複数を表現できますが、、一般的な呼称はあるのでしょうか? 例: 1=りんご 2=みかん 4=ばなな と定義したとき フィールド値 3は りんご、みかん を示す。 フィールド値 7は りんご、みかん、ばなな を示す。 つたない説明ですみませんが、呼称、算出方法など何か参考になるサイトがあればご教授下さい。

  • 複数フィールドの最大値を行ごと抽出したい

    ACCESS2010を使用しています。 テーブルデータは以下です。 日付 コード 値a 値b 値c 2014/1/1 aaa 100 50 80 2014/1/1 aaa 80  60 30 2014/1/1 aaa 100 20 90 この時欲しいデータは 2014/1/1 aaa 100 50 80 のみです。 値aの最大値を行ごと抽出したいのです。 エクセルデータをリンクテーブルとしています。 値aを集計『最大』としてクエリを作成しましたがうまくいきません。 過去のSQLの質問なども見ましたが、ACCESS初心者のため理解できず困っています。 そもそも、SQL構文を使わずにクエリウィザードでこの抽出はできるものなのでしょうか… トンチンカンな質問でしたら申し訳ございません。

  • ファイルメーカーでフィールド内のユニークな値の合計

    ファイルメーカー Pro8.5を利用しています。 使用OS:Windows XP Professional フィールドに入っているユニークな値の数を求める方法を 知りたいです。 例えば、このようなデータがあるとします。 たまご りんご りんご たまご みかん たまご みかん ・ ・ ・ 上記の例でいくと、現在該当のレコード一覧には3種類の商品が あるので、「3」という数字を返してくれるフィールドを作りたいです。 集計フィールドのカウントを使ってみましたが、当然ながら「7」になります。 市販マニュアルの関数一覧を一通り探したのですが、 それらしき関数を見つける事が出来ませんでした。 それでは何卒宜しくお願い申し上げます。