• ベストアンサー

SQL文について

unamana19の回答

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

SELECT SHOP_CODE, SHOP_NUMBER , DECODE(SHOP_CODE, 'A', MONEY1, 0) MONEY1 , DECODE(SHOP_CODE, 'A', MONEY2, 0) MONEY2 FROM TBL これじゃダメ?

ieeek2008
質問者

お礼

ご回答ありがとうございます。(^^)ようやく返事をする時間ができました。(^^; なるほどDECODE関数を使用するわけですか。私もこの回答を見てすこし調べました。条件によって分岐させることができるわけですネ。これならば、シンプルな文でよいと思います。ただ、一つ気になるのはもし、分岐条件が複雑になってきた場合は(今回はAの場合とそれ以外という分けだと思いますが)第1の引数と第2の引数('A'の箇所)に分岐条件の式などを書いたりもできるのかななんて思いました。 そういえば疑問が浮かんだので書き込んでおきます、、、。回答された文の中にはDECODE(○○○○)MONEY1と表記がありますが、MONEY1という表記はいりますかネ?私の調べた感じだと表記はいらないかもなんて思ったもので、、。それとも分かりやすいように明示的に書いていただいたのかな?(^^)もしくはそう書くこともできるとか?私の方でいろいろ試してみます。 朝早くから回答していただきありがとうございました。m(_ _)m

関連するQ&A

  • シンプルなSQLの書き方がわかりません。

    以下のSQLをシンプルに一つにしたいのですが、どのように書いたらよろしいでしょうか? どうぞご返答頂けますようお願い申し上げます。 --test1_tblの抽出 select a1 as a1, b1 as b1 from a_tbl where c=1 --test2_tblの抽出 select a1 as a1, e1 as e1 from b_tbl where rowid in (select min(rowid) from ee group by a1) and a1 is not null and a1 !=' ' order by a1 --test1_tblとtest2tblの結合 select t0.a1 as a1, t0.b1 as b1, t1.e1 as e1 FROM test1_tbl t0, test2_tbl t1 WHERE (t0.a1 = t1.a1)

  • 列を行に変換したいです。

    列を行に変換したいです。 SQLServer2008初心者です。 テーブル関数のFETCH内で以下のような図の列1~21を行に変換したいのですが、 うまくいきません。 CODE1 CODE2 CODE3 … CODE21 ----------+----------+----------+----------+---------- AAA BBB CCC … UUU ↓ 列1 ------ AAA BBB CCC … UUU 自分で調べたところ、SQLServer2005ではUNPIVOTを使えるということで 同じように書いたのですが、「'UNPIVOT'の近くに無効な構文があります」というエラーが出てきてしまいます。 ちなみに、以下のように書きました。 SELECT CODE FROM( SELECT CODE1, CODE2, …, CODE21 FROM 商品マスタ    WHERE SYCODE = @SYCODE ) AS TBL UNPIVOT (CODE for ColName in (CODE1, CODE2, …, CODE21)) AS CD UNPIVOTの使い方が間違っているようでしたらご指摘をお願いします。 また、UNPIVOTが使えない場合、 SELECT CODE1 FROM 商品マスタ WHERE SYCODE = 11111 UNION ALL SELECT CODE2 FROM 商品マスタ WHERE SYCODE = 11111 UNION ALL … という風に列21までのSELECT文をずらずらと統合することになるのかなぁ、と考えているのですが、 もっと簡潔な方法がありましたらご指導頂きたいです。 よろしくお願いします。

  • SQL文の実行速度について

    こんにちは。SQLを勉強しています。 質問をさせてください。 Oracleテーブル(test_table:レコード数はかなりあると考えて構いません) にnumber(int),value(varchar), code(varchar)の3つのフィールドが存在 するとします。 今、codeを指定してvalueを取得したいと考えています。 (1)---------------------------- select value from test_table where code='001'; select value from test_table where code='002'; select value from test_table where code='003'; (2)---------------------------- select code, value from test_table where code='001' or code='002' or code='003' (1)と(2)ではどちらが実行速度が速いのでしょうか? 実際に実行すればわかることですが、そういった環境が ないので、確認できません。宜しくお願い致します。

  • SQL文について

    TBL_A カラム1 |カラム2 |カラム3 |カラム4 | ---------|---------|---------|---------| 1    |AAA   |N    |1    | ---------|---------|---------|---------| 2    |AAA   |G    |1    | ---------|---------|---------|---------| 3    |BBB   |N    |0    | ---------|---------|---------|---------| 4    |CCC   |N    |0    | ---------|---------|---------|---------| TBL_B カラム1 |カラム2 | ---------|---------| AAA   |2    | ---------|---------| BBB   |0    | ---------|---------| CCC   |1    | ---------|---------| 上記のテーブル、TBL_A、TBL_Bがあるとします。 TBL_Aからカラム3='N'を抽出し、TBL_Bのカラム2でソートしたいのですが、 可能でしょうか? 結果 ---------|---------| BBB   |0    | ---------|---------| CCC   |1    | ---------|---------| AAA   |2    | ---------|---------| …となって欲しいのですが。。。 select TBL_A.カラム2 from TBL_A, TBL_B where TBL_A.カラム3='N' order by TBL_B.カラム2 では、うまくいきませんでした。 ※ TBL_A、TBL_Bは共にカラム1がキー値です。

  • SQL サブクエリで抽出したカラムについて

    サブクエリで抽出したカラムを 本クエリでの結果と一緒に表示したいのですが どのように実現してよいかわからず困っております。 詳細としては、下記のようなことをしたいと考えております。 文中の1)と2)は文章下部にあるSQLを指しております ----------------------------------------------------------- 最初は、1)のように凄く単純なSQLでよかったのですが 仕様が変わり、TBL2で取得した新しいカラムも一緒に 本クエリでの結果として取得できれば、SQLを2回実行せずに済むなと考えたのですが、 2)のように色々と試行錯誤したのですが、実現できません。 (2)は単なる空想ですが…) そこで、わかる方にお伺いしたいのですが、 副問い合わせで取得した複数カラムの中の1つのカラム【2)でいうところのTBL2.X】 を 2)のように"select TBL1.A , TBL2.X"として、結果を得ることは可能でしょうか。 ただし、 TBL1のカラムAは、TBL2に存在しない TBL2のカラムXは、TBL1には存在しない カラムBは、TBL1、TBL2に存在する の条件となっております 環境はMysqlです テーブル結合の方法も考えたのですが、 TBL2で、日付でソートし、その上位100件だけを 持ってきたいと思ったので、副問い合わせで一気に抽出しようとこの方法を考えまし た お分かりになる方がいらっしゃいましたらよろしくお願いします 1)SQL ------------ select TBL1.A from TBL1 where TBL1.B in ( select TBL2.B from TBL2 where 条件 ) 2)想像SQL(こんな感じの事をしたい) -------------- select TBL1.A , TBL2.X from TBL1 where TBL1.B in ( select TBL2.B , TBL2.X from TBL2 where 条件 order by TBL2.日付 desc limit 100 )

    • ベストアンサー
    • MySQL
  • ACCESSのSQLの書き方

    ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)

  • SQL : たしかに DELETE したの?

    ありがちな処理かと思いまして質問させていただきます。 SQLで DELETE を行う際、WHERE で絞り込んだ対象行がなくても、  「エラーは返ってこない」 ということですが、NOT FOUND判定はするのでしょうか。 ごく単純に、削除しようとしたデータが実際にあったのかを確認したいのです。 やろうとしている処理は、次のようなものです。 DELETE FROM a_tbl WHERE NOT EXISTS (SELECT row1 FROM b_tbl WHERE row1 = 'input_data' ) AND NOT EXISTS (SELECT row1 FROM c_tbl WHERE row1 = 'input_data' ); ようするに、他のテーブルに、すでにない行であることが前提で、 a_tbl から DELETE したことを確認したいのです。 Pro*C内で実行するのですが、一般に同じだと思います。 キホンのキかもしれませんが、よろしくお教えください。

  • SQL文で質問があります。

    商品マスタがあり、データは下記の感じで登録されています。  コード | 商品名  | 商品カナ | 分類コード ・・・ ---------------------------------------------------------  0001  | マウス  | マウス  | 01     ・・・  0002  | キーボード| キーボード| 01     ・・・  0003  | モニター | モニター | 01     ・・・          ・          ・          ・ SQL文で質問があります。 下記のSQLでは取得できるんですが・・・ SELECT * FROM M_SHOHIN WHERE code = ANY('{0001,0002,0003}'); 下記のSQLを実行したらエラーが出力されました。 SELECT * FROM M_SHOHIN WHERE code = ANY(  SELECT ARRAY_AGG(code) AS code FROM M_SHOHIN WHERE class_code = '01' ); ERROR: operator does not exist: character varying = character varying[] HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. なので下記のようにCASTをするようにして実行したらエラーは出力されなくなりましたがデータの取得ができませんでした。 SELECT * FROM M_SHOHIN WHERE code = ANY(  SELECT CAST(ARRAY_AGG(code) AS VARCHAR) AS code  FROM M_SHOHIN WHERE class_code = '01' ); どのようにすれば取得できますでしょうか。 説明が下手で申し訳ありませんがアドバイスいただけませんでしょうか。 データベースはPostgreSQL 8.4.9です。 宜しくお願いします。

  • SQLについて

    SELECT YKC.code FROM ( SELECT code,seq FROM Ctable C,Dtable D WHERE C.num = D.num AND C.DATE <= '05/01/01' ) YKC GROUP BY code,seq HAVING YKC.seq = MAX(YKC.seq) のように記述したのですが、 HAVING YKC.seq = MAX(YKC.seq)の部分が働いてくれず 複数行取ってきてしまいます。 seqがMAXの1行だけを取得したい場合、 どのようなSQLにすれば良いでしょうか?

  • 【再】2)-SQL文の書き方を教えてください。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=694458 先日この問題で投稿しましたが、未完成のため、再度要望を整理し、ご指導をお願いいたします。 W←tabel名:名称、日付、数量 明細データ:     名称   日付    数量 A   2003/10/01   200 B   2003/10/03   500 C   2003/10/10   4000 A   2003/10/03   200 A   2003/10/03   100 C   2003/10/15   100 B   2003/10/15   300 C   2003/10/15   50 B   2003/10/15   60 求めているクエリーのイメージ:    2003/10/15 時点 ================================================ 名称     当日数量     当月数量     A          0       300     B         360       860     C         150       4150 ------------------------------------------------- 先日教えてもらったSQL文、希望のクエリーを作れないです。 -------------------------------------------------- select 名称, sum(AAA) as 当日数量, sum(BBB) as 当月数量 from ( select 名称, 0 as AAA, sum(数量) as BBB from W where 日付 >= #2003/10/01# and 日付 <= #2003/10/15# group by 名称 union select 名称, sum(数量) as AAA, 0 as BBB from W where 日付 = #2003/10/15# group by 名称 ) group by 名称; このSQL文は、2番目のSelectのところでエラーが出る (From句の構文エラーです) -------------------------------------------------- 後、Accessバージョンによって、SQL文が変わるでしょうか?当方は、Access97を使っている。 ご指導をお願いいたします。