プロが教える店舗&オフィスのセキュリティ対策術

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
で抽出できるのですが、現実的だと思えなくて・・・・

良い方法がありましたら、よろしくお願いします。

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

ご提示いただいたコードで希望していた動作確認できました。
ご回答ありがとうございました。

お礼日時:2009/11/15 20:37

問合せしたいテーブルを、別のテーブルの登録内容に従って、


読み替えつつ表示する、と考えれば良いのかと思いますが、
"1以外"という条件をテーブルに、どのように登録するかが
難しいように思います。
(取り決めの問題と言えばそれまでですけどね)


例えば、"1以外"を、nullをキーとして登録したとすると・・

条件TBL
列1列2
11
(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(+)
;

のような外部結合を使った問合せが可能です。
    • good
    • 0

ちょっと何をされたいのか明確に分かりません。


元のテーブルに格納されている値と、取得したい値を分けて提示して頂けると回答がし易くなるかと。

とりあえず、下記の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

補足日時:2009/11/01 20:26
    • good
    • 0

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

関連するカテゴリからQ&Aを探す