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

テーブルA
----------
コード
区分
金額1
金額2

というテーブルがあるとして、その中から、

区分=1 AND 金額1>=0 の時は金額1、
区分=1 AND 金額1< 0 の時は金額2、
区分=2 AND 金額2>=0 の時は金額2、
区分=2 AND 金額2< 0 の時は金額1
をSELECTしたいのですが、1つのSELECT文で抽出する事は可能でしょうか?

SELECT ・・・←ここにどう書けば良いんでしょうか?
FROM テーブルA;

A 回答 (7件)

手元にOracleが無いので確認できませんが、DECODE関数か、CASE式を使えば良いように思えます。



参考URL:http://www.t3.rim.or.jp/~buchi/rdb.html#decode,h …
    • good
    • 0

またウソつきました


条件が金額1>=0なので・・・

select * from(
(select コード,decode(SIGN(金額1),-1,金額2,金額1) as W_金額
from テーブルA
where 区分 = 1)
union all
(select コード,decode(SIGN(金額2),-1,金額1,金額2) as W_金額
from テーブルA
where 区分 = 2)
)
order by コード;

ですね
    • good
    • 0

SQL> insert into テーブルA values('A001',1,1,100);


1行が作成されました。
SQL> insert into テーブルA values('A002',1,-100,2);
1行が作成されました。
SQL> insert into テーブルA values('A003',2,100,3);
1行が作成されました。
SQL> insert into テーブルA values('A004',2,4,-100);
1行が作成されました。
SQL> commit ;
コミットが完了しました。


SQL> select * from(
2 (select コード,decode(SIGN(金額1),1,金額1,金額2) as W_金額
3 from テーブルA
4 where 区分 = 1)
5 union all
6 (select コード,decode(SIGN(金額2),1,金額2,金額1) as W_金額
7 from テーブルA
8 where 区分 = 2)
9 )
10 order by コード;

コード W_金額
-------- ----------
A001 1
A002 2
A003 3
A004 4


SIGN
構文SIGN(n)
用途n<0ならば-1、n=0ならば0、n>0ならば1を戻します。

前回は「ウソ」ついてごめんなさい
今度こそ「自身あり」です
    • good
    • 0

DECODEを使うなら、引数1に演算式を入れて下さい。


それかCASE式と使われてはいかがでしょう?

参考URL:http://www.seshop.com/se/edu/shikaku/omo/miti/si …
    • good
    • 0

[補足]



select * from(
(select コード,decode(金額1,金額1>=0,金額1,金額2) as W_金額
from テーブルA
where 区分 = 1)
union all
(select コード,decode(金額2,金額2>=0,金額2,金額1) as W_金額
from テーブルA
where 区分 = 2)
)
order by コード

この回答への補足

ありがとうございます。

私も最初、decode関数を使おうと思ったのですが、
decode(金額1,金額1>=0,金額1,金額2)
のような書き方が出来ませんでした。
=<>などはdecode関数内で使えないものと思ったのですが、どうなのでしょうか?

補足日時:2004/08/04 09:01
    • good
    • 0

select * from(


(select コード,decode(金額1,金額1>=0,金額1,金額2) as W_金額
from テーブルA
where 区分 = 1)
union all
(select コード,decode(金額2,金額2>=0,金額2,金額1) as W_金額
from テーブルA
where 区分 = 2)
)
    • good
    • 0

ORACLEはあまり詳しくありませんが、UNIONを使用すれば出来るかも...



SELECT 金額1
FROM テーブルA
WHERE (区分=1 AND 金額1>=0) OR (区分=2 AND 金額2< 0)

UNION SELECT 金額2
FROM テーブルA
WHERE (区分=1 AND 金額1< 0) OR (区分=2 AND 金額2>=0)
    • good
    • 0

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