ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3883874 1つのフィールドに複数値を設定した場合の抽出方法
質問者:sutonarini ACSESS97を使用しています。
フィールドに複数の値を区切り文字を用いて設定した場合に、SQLを用いて抽出することは可能でしょうか?

注文番号  品物
  1   りんご;みかん
  2   たまご
  3   みかん;たまご

この場合、品物に”みかん”が含まれている行を抽出するにはどのような方法があるのか教えてください。
困り度:
  • すぐに回答を!
質問投稿日時:
08/03/22 01:43
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.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    みかん
回答者:CHRONOS_0
種類:回答
どんな人:経験者
自信:自信あり
回答日時:
08/03/22 17:30
この回答へのお礼ありがとうございます。
助かりました。

参考にさせていただきます。

回答

ANo.2 Likeが使えないとなると区切り文字で分解してひとつずつ比較するようなVBAコードを組むしかないですね
当然クエリは使えません、VBAで1レコードずつ処理していくことになります
テーブルがデータベースの原則を外しているのですから面倒なことになるのは自業自得です
回答者:CHRONOS_0
種類:回答
どんな人:経験者
自信:自信あり
回答日時:
08/03/22 13:04
この回答へのお礼回答ありがとうございます。

VBから参照するので、ロジックを組むのは構わないのですが、
実際はフィールドが複数存在し、抽出条件も複数あるため、なるべくSQLで処理を共通化できたら良いなあと思っていた次第です。

Likeで抽出して、抽出したものに問題がないかあとからチェックをかけるのが一番シンプルなのでしょうかね。

クエリ等で複数値をばらせることができる方法があれば、
良いのですが・・・。

注文番号  品物
  1   りんご
  1   みかん
  2   たまご
  3   みかん
  3   たまご

こんな感じに変更できれば、一番良いのですが、
何か方法はないでしょうか。

回答良回答10pt

ANo.1 以下のSQLを試してみてください

--------------
select
注文番号
,品物
from テーブル名
where 品物 Like "*みかん*"
--------------
補足
欠点は、商品名に「みかんジュース」なんかがあった場合もひっかかることです。

解消するにはテーブルに項目を追加し、
注文番号、注文毎明細番号、品物
などの構成にするとよいでしょう。
SQLで対応できなくもないですが鬱陶しい条件になります。
回答者:ace456
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/03/22 02:04
この回答へのお礼回答ありがとうございます。

テーブルの構成と内容は私が決めることができないので、
「みかんジュース」がひっかかるとなるとワイルドカードを使用するのは難しいです。

少々鬱陶しくても確実に「みかん」が含まれている行を取り出したいのですが、何か方法はないでしょうか?