- ベストアンサー
こういうSELECTは可能でしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
手元にOracleが無いので確認できませんが、DECODE関数か、CASE式を使えば良いように思えます。
その他の回答 (6)
- corgi12kg
- ベストアンサー率51% (28/54)
またウソつきました 条件が金額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 コード; ですね
- corgi12kg
- ベストアンサー率51% (28/54)
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を戻します。 前回は「ウソ」ついてごめんなさい 今度こそ「自身あり」です
- peugeot307
- ベストアンサー率22% (29/130)
DECODEを使うなら、引数1に演算式を入れて下さい。 それかCASE式と使われてはいかがでしょう?
- corgi12kg
- ベストアンサー率51% (28/54)
[補足] 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 コード
- corgi12kg
- ベストアンサー率51% (28/54)
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) )
- rotesKomet
- ベストアンサー率31% (83/265)
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)
関連するQ&A
- SQLのSELECT文教えてください。
VB5.0で、DBはSqlServer2000です。 SQL文のSELECT文で質問です。 ○A_TABLEの構成(概略) ・・・担当コード1・・・担当コード2 ○TANTO_TABLE 担当コード/担当名 (質問)TANTO_TABLEからA_TABLEの担当コード1と担当コード2の担当名を抽出したいのです。 次のSQLだと担当コード1のみしか抽出できません。 効率よく担当コード1と2の担当名を抽出するSQLを教えてください。お願いします。 SELECT 担当名 FROM A_TABLE,TANTO_TABLE WHERE A_TABLE.担当コード1 = TANTO_TABLE.担当コード
- ベストアンサー
- Visual Basic
- SELECTのスピード
SELECTのスピードでどの方法が 検索スピードが速いのか教えてもらいたいのですが Aのテーブル DENNO CODE Bのテーブル CODE NAME Aのテーブルを主にAのCODEでBのテーブルを参照したい時 (1) SELECT A.DENNO,A.CODE, (SELECT B.NAME from B where A.CODE=B.CODE) AS NAME from A (2) SELECT A.DENNO,A.CODE,B.NAME FROM A LEFT JOIN B ON A.CODE=B.CODE (3) SELECT A.DENNO,A.CODE,B.NAME FROM A , B WHERE A.CODE=B.CODE(+)
- ベストアンサー
- Oracle
- SELECT文が上手く書けません
会社からSQLのSELECT文を書けと言われて3日目です。PostgreSQL のシステムでWHERE以下が WHERE 売上年月 = ? AND 得意先コード = ? AND 売上種別 = ? としました。画面上では売上年月、得意先コード、売上種別で検索できるようになっているのですが、3種類全て入力しないとエラーになります。この内1種類の入力でも検索できるようにしたいのですが、どのように書けばいいでしょうか? ANDをORに変えたりしたのですが上手くいきません。 全体のSELECT文は external.売上= SELECT 売上番号、売上日、得意先コード、売上区分、金額、入力日 FROM 売上一覧表 WHERE 売上年月 = ? AND 得意先コード = ? AND 売上種別 = ? です。 よろしくお願いします。
- 締切済み
- PostgreSQL
- SQLでSELECTした一覧をUPDATEする方法を教えてください。
AのテーブルをINNER JOINのWHERE文を用いて、selectした結果の項目にBテーブルの内容をUPDATEしたいのですが、 下記方法でうまくいきません。 解決方法を教えてください。 よろしくお願いいたします。 SELECT A.PointZan FROM A INNER JOIN B ON A.Code = B.Code WHERE (B.TrDate = '091012') AND (B.Comment = '失効中止') UPDATE A SET PointZan = (SELECT B.PointZan FROM B INNER JOIN A ON B.Code = A.Code WHERE (B.TrDate = '091012') AND (B.Comment = '失効中止'))
- ベストアンサー
- Microsoft ASP
- select文について
現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。
- ベストアンサー
- MySQL
- 【初歩的な質問ですが・・・】 SQL文書き方がわかりません
SQLの知識に乏しい者です。 よろしくお願い致します。 ●テーブルA ・会計コード ・年度 ・部署番号 ・社員番号 ・その他幾つかのデータ ※Where句で「年度>2002年」以降を抽出 のテーブルがあります。 この時、Bテーブルで ●テーブルB ・会計コード(主キー) ・年度 ・部署番号(主キー) ・社員番号(主キー) ・その他幾つかのデータ ※Aテーブルで抽出されたデータの中から絞り込む というテーブルを抽出するSQL文を組みたいのですが、効率の良いやり方がわかりません。 副問合せで Select [B表で抽出した列名…] From B表 Where 会計コード = (Select 会計コード From A表 Where 年度 > '2002') AND 部署番号 = (Select 部署番号 From A表 Where 年度 > '2002') ・・・・以下省略 の様に書くと効率が悪い気がしました。 (実際には、副問合せが6個書くことになるため) 良い書き方を知っている方がいらっしゃいましたら、よろしくお願い致します。
- ベストアンサー
- Oracle
- selectの内容によって、登録するカラムを変えたい
selectの内容によって、登録するカラムを変えたい selectであるテーブルからある値Aをとってきます。 値Aが1の時は別テーブルの金額1に登録、2の時は金額2に登録、3の時は金額3に登録 という処理を行いたいです。 同一レコードに対して複数の金額がある事があります。 テーブル1(取得テーブル) ------------------ キー 値A 金額 1 1 500 1 3 300 2 3 200 ------------------ テーブル2(登録テーブル) ------------------ キー 金額1 金額2 金額3 1 500 0 300 2 0 0 200 ------------------ いま、 insert into テーブル2 SELECT 項目 from テーブル1 というように1つのSQLで、登録、削除をしようとしていますが 可能でしょうか?。方法がよく分かりません。
- ベストアンサー
- Oracle
- SELECT文
SELECT文で区分ごとに番号、番号名を表示させたいのですが。 T_テーブルに区分が1から5まであるのですが、select文一発で表示したいです。 番号は1~5,番号2は5~6まで表示したいのです。 区分は2の情報を取得する 1テーブルの情報を番号ごとに分けて表示したいです (例) 番号 番号名 番号1 番号名2 1 iti 5 go 2 ni 6 roku 3 san 7 nana 4 yon 8 hati T_テーブル情報 下記 区分 varchar(2) 番号 varchar(6) 番号名 varchar(16) SELECT T_テーブル.区分, T_テーブル.番号, T_テーブル.番号名, T_テーブル_1.番号, T_テーブル_1.番号名 FROM T_テーブル AS T_M_名称_1 INNER JOIN T_テーブル ON T_テーブル_1.区分 = T_テーブル.区分WHERE T_テーブル.区分 = '2'
- ベストアンサー
- SQL Server
- Select文のパフォーマンスについて
Select文のパフォーマンスについて質問です。 (1)select * from table1 where col1='00001' and kbn in (1,2,3,4) (2)select * from table1 where col1='00001' and (kbn = 1 or kbn = 2 or kbn = 3 or kbn = 4) (1)と(2)ではどちらがパフォーマンスがよいのでしょうか? SQLServer2008
- ベストアンサー
- SQL Server
- Select文1 マイナス Select文2
テーブルA ユーザーID,地名,県名,評価 テーブルB ユーザーID,県名,制覇flag のような二つのテーブルがあると仮定してSelect文1、 "select 県名,count(地名) from テーブルA where ユーザーID=1 group by 県名 order by count(地名);" の結果が 県名,count(地名) 北海道,30 東京,22 京都,15 名古屋,10 鳥取,9 沖縄,8 であるとし、 Select文2、 "select 県名 from テーブルB where usrid=1 and 制覇flag='true'" の結果が、 県名 北海道 東京 とします。 このSelect文1の結果から、Select文2の結果を引いて 県名,count(地名) 京都,15 名古屋,10 鳥取,9 沖縄,8 の結果を得るにはどうすればよいでしょうか? Mysqlのバージョンは5.0.21です。
- ベストアンサー
- MySQL
補足
ありがとうございます。 私も最初、decode関数を使おうと思ったのですが、 decode(金額1,金額1>=0,金額1,金額2) のような書き方が出来ませんでした。 =<>などはdecode関数内で使えないものと思ったのですが、どうなのでしょうか?