ここから本文です

SQL(SELECT)について、教えて下さい。DBはオラクル10gです。

ana********さん

2011/4/2922:26:53

SQL(SELECT)について、教えて下さい。DBはオラクル10gです。

テーブルにあるカラムを取得し、以下のような結果を得たいのですが、SELECT文の書き方を教えて下さい。

Aテーブル
COL1 COL2
100 CASE WHEN COL1 = '100' THEN '1' ELSE '0' END
101 CASE WHEN COL1 = '200' THEN '1' ELSE '0' END

(期待結果)
COL1 COL2
100 1
101 0

現在は以下のSELECT文を実行していますが、COL2の内容がそのまま取得されています。
SELECT COL1,COL2 FROM Aテーブル
(検索結果)
COL1 COL2
100 CASE WHEN COL1 = '100' THEN '1' ELSE '0' END
101 CASE WHEN COL1 = '200' THEN '1' ELSE '0' END

上記の期待結果を出力するには、どうすればよいのでしょうか。

補足AテーブルのCOL2には、どんな内容がセットされているか解りませんので、あらかじめ、SELECT文に書くことができません。

閲覧数:
692
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

ste********さん

2011/4/3012:49:02

SELECT(セレクト)命令は指定された表内より条件に合致した列を持つ行を探索し列の内容を取りだします。

基本文法
SELECT 列名 FROM 表名 WHERE 条件

--------------------------------------------------------------------------------
例) 表より全ての行の全列を表示する場合
表名 : DEPT
列名 : 全列
SQL : SELECT * FROM DEPT;

列名に*(アスタリスク)を指定した場合、表よりすべての行のすべての列を取り出し表示します。




--------------------------------------------------------------------------------
例) 表より全ての行の特定の列を表示する場合
表名 : DEPT
列名 : DEPTNO,DNAME
SQL : SELECT DEPTNO,DNAME FROM DEPT;

特定の列を取り出したい場合は列名を指定します。列名を複数指定する場合は、列名と列名の間は,(カンマ)で区切り指定します。
特定の行を取り出したい場合は行の条件を指定します。





--------------------------------------------------------------------------------
例) 表より特定の行の全列を表示する場合
表名 : DEPT
列名 : 全列
SQL : SELECT * FROM DEPT WHERE DEPTNO = 40;

DEPTNOの内容が40の行を取り出す場合





--------------------------------------------------------------------------------
例) 表より特定の行の全列を表示する場合
表名 : DEPT
列名 : 全列
SQL : SELECT * FROM DEPT WHERE DEPTNO >= 10 AND DEPTNO <= 30;

DEPTNOの内容が10以上かつ30以下の行を取り出す場合
(画像をクリックすると拡大表示できます)




BETWEEN関数を使って
SELECT * FROM DEPT WHERE DEPTNO BETWEEN 10 AND 30;
としても同じ結果が得られます。
(画像をクリックすると拡大表示できます)




--------------------------------------------------------------------------------
例) 表より特定の行の特定の列を表示する場合
表名 : DEPT
列名 : DEPTNO,DNAME
SQL : SELECT DEPTNO,DNAME FROM DEPT WHERE LOC LIKE 'NEW%'

LOCの列の内容に'NEW'が含まれる行のDEPTNO,DNAME列を取り出す場合
(画像をクリックすると拡大表示できます)

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

tum********さん

2011/5/209:19:54

カラムの中身をSQLの条件文にすることは、いくらOracleでもできません。
SQL Plusの世界ならBEGIN-EXECUTE-ENDを利用してSQL文を一度変数に格納して処理すればできないことはないですけど、現実的ではありません。
プログラム側で処理するか、あるいは別のテーブル切ってjoinするほうが現実的でしょう。

yof********さん

編集あり2011/4/2923:47:24

こんにちは。

まずAテーブルのCOL2にCASE文が丸ごと格納されていることが謎ですが。。
CASE文の結果を取得する場合は、AテーブルにCOL2列は不要です。

以下でいけると思います。

SELECT COL1, CASE WHEN COL1 = '100' THEN '1' ELSE '0' END AS COL2 FROM Aテーブル
※もしかして、COL2はCOL3などとして、列名が重複しないようにしなければいけないかも。。

200の場合でも1で返したい場合は、
SELECT COL1, CASE WHEN COL1 = '100' OR COL1 = '200' THEN '1'
ELSE '0' END AS COL2 FROM Aテーブル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる