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