• ベストアンサー

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