- ベストアンサー
SQLの作成方法
SQLの具体的なプログラム方法を教えていただく投稿させていただきました 列1 |列2 1 |1 1以外 |2 上記の条件で抽出できる条件がわからず、教えていただきたいです。 現行、 IIf([列1]=1,"1","2") と定数なら記述できるのですが、 列2はどちらも列2の値(具体値は不明)が必要なんです。 1以外という行のデータの列2の値を得れなくて・・・・ 最悪な方法として、DBデータを手で増やし、 列1 |列2 1 |1 2 |2 3 |2 4 |2 ・・・・ 1000 |2 と変更してしまえば WHERE [列1] = hoge で抽出できるのですが、現実的だと思えなくて・・・・ 良い方法がありましたら、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足、ありがとうございます。 マスタテーブル:YYY に「その他の場合」の値として列1がNULLの行を登録しておくとすると、下記の様な方法が考えられます。 ・別テーブルとマスタテーブルを LEFT OUTER JOIN ・列2がnullになった行には、マスタテーブルの列1がNULLの行の列2の値を設定 例) -------------------------------------------------------------- SELECT XXX.列A, CASE WHEN YYY.列2 IS NULL THEN (SELECT 列2 FROM YYY WHERE 列1 IS NULL) ELSE YYY.列2 END AS 列2 FROM XXX LEFT OUTER JOIN YYY ON(YYY.列1= XXX.列A) ------------------------------------------------------------------
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
問合せしたいテーブルを、別のテーブルの登録内容に従って、 読み替えつつ表示する、と考えれば良いのかと思いますが、 "1以外"という条件をテーブルに、どのように登録するかが 難しいように思います。 (取り決めの問題と言えばそれまでですけどね) 例えば、"1以外"を、nullをキーとして登録したとすると・・ 条件TBL 列1 列2 1 1 (null) 2 テーブル1 列A 1 2 3 4 select nvl(列2,列X) from テーブル1, 条件TBL, (select 列2 列X from 条件TBL where 列1 is null) where 列A=列1(+) ; のような外部結合を使った問合せが可能です。
- root139
- ベストアンサー率60% (488/809)
ちょっと何をされたいのか明確に分かりません。 元のテーブルに格納されている値と、取得したい値を分けて提示して頂けると回答がし易くなるかと。 とりあえず、下記の2通りの解釈の場合の例を書きます。 1. 列1と列2の値が共に1の行と、列1の値が1以外で列2の値が2の行を取得したい。 SELECT 列1, 列2, ・・・ FROM XXX WHERE (列1 = 1 AND 列2 = 1) OR (列1 <> 1 AND 列2 = 2); 2. テーブルから列1の値を取得し、それが1だった場合は列2に1を設定し、1以外だった場合は2を設定する。 SELECT 列1, CASE 列1 WHEN 1 THEN 1 ELSE 2 END AS 列2 FROM XXX;
補足
内容が不明瞭で申し訳ないです。 「列1をキーとして列2の値が取得したい」が目的です マスタテーブル:YYY 列1 |列2 1 |1 1以外 |2 SELECT 列2 FROM YYY,別テーブル WHERE ※※ここの条件を知りたい※※ 例えば 別テーブル:XXX 列A 1 2 3 SELECT 列2 FROM YYY,XXX WHERE YYY.列1=XXX.列A では ×実行結果 1 となってしまいます。 そこで、XXXというテーブルで参照した時に、下記のような結果になるような方法をお伺いしたいのです。 ○実行結果 1 2 2
お礼
ご提示いただいたコードで希望していた動作確認できました。 ご回答ありがとうございました。