アプリ版:「スタンプのみでお礼する」機能のリリースについて

ACSESS97を使用しています。
フィールドに複数の値を区切り文字を用いて設定した場合に、SQLを用いて抽出することは可能でしょうか?

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

この場合、品物に”みかん”が含まれている行を抽出するにはどのような方法があるのか教えてください。

A 回答 (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    みかん
    • good
    • 0
この回答へのお礼

ありがとうございます。
助かりました。

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

お礼日時:2008/03/22 23:54

Likeが使えないとなると区切り文字で分解してひとつずつ比較するようなVBAコードを組むしかないですね


当然クエリは使えません、VBAで1レコードずつ処理していくことになります
テーブルがデータベースの原則を外しているのですから面倒なことになるのは自業自得です
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

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

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

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

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

お礼日時:2008/03/22 14:08

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



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

解消するにはテーブルに項目を追加し、
注文番号、注文毎明細番号、品物
などの構成にするとよいでしょう。
SQLで対応できなくもないですが鬱陶しい条件になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

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

お礼日時:2008/03/22 12:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!