DB2のSQLについての質問

このQ&Aのポイント
  • DB2のSQLについて質問があります。数量という項目が数値だった場合にそのまま数量の値を、違った場合には「0」を返すSQLの作成方法を教えてください。
  • 子テーブルの数量と親テーブルの数量を足し算した結果を出力するSQL「(親.数量 + 子.数量) as 数量」で、子テーブルデータが存在しない場合に「子.数量」にnullが返ってくる場合、数値だったらという条件で処理をしたいです。
  • DB2のSQLで、特定の条件に応じて処理を行うためには、case文を使用する方法があります。数量が特定の値だった場合にはその値を返し、異なる場合には「0」を返すSQLを作成するにはどのようにすればよいでしょうか?
回答を見る
  • ベストアンサー

DB2のSQLについて

DB2のSQLについて質問があります。 以下の構文は数量という項目が??だったらそのまま数量の値を違ったら「0」を返すというSQLですが、 ??の部分に「数量という項目が数値だった場合」としたいです。 理由は、親子のテーブルで外部結合をしているのですが、子テーブルの数量と親テーブルの数量を足し算した結果を出力するというSQL「(親.数量 + 子.数量) as 数量」なのです。その為、子テーブルデータが存在しない場合、「子.数量」にnullが返ってきますので以下のSQLを使用して数値だったらとしたいのですが、「??」に数値だったらと入れることができるのでしょうか? case 数量 when ?? then 数量 else 0 end また、他に方法があれば、ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 いや・・・、CASEじゃなくて、 SELECT (親.数量 + COALESCE(子.数量, 0)) as 数量 FROM ~ でいいんじゃないかと・・・。 (^^ゞ

toshi_2004
質問者

お礼

できました!! ホントにありがとうございますm(_ _)m 関数がなにがあるかすらわからない未熟者です。 ありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 子テーブルの数量が数値だったら・・・。 よりも、 子テーブルの数量がNULLだったら0にして合計する方がすっきりしてると思います・・・。 ほかに理由があるのなら別ですが・・・。 (^^ゞ

toshi_2004
質問者

補足

ご回答ありがとうございます。 すいません。全然理由はないです。。 NULLだったら0にするという方法は case 数量 when ?? then 数量 else 0 end ??の部分が NULL と指定した場合はエラーになってしまいます。 どんな方法があるのでしょうか? ご教授宜しくお願い致します。

関連するQ&A

  • 外部結合のデータについて

    DB2のSQLについて質問があります。 親子テーブルを外部結合した場合に子テーブルに存在しないデータの場合、取得レコードの子テーブルの項目にはどんな値が入るのでしょうか? (1)null (2)空:'' (3)スペース:' ' (4)その他 ご教授お願い致します。

  • OS/390 DB2 簡単なSQLで結果が異なるのですが 

    簡単なSQLなのですが、 バージョン違いが起因するのか、 導入の際のテーラーリング作業の違いなのか、 SQL結果が異なって困ってます。 状況は以下の通りです。 テーブルA 定義内容 項目 a b c    ・    ・    ・ データ内容(aの値)    +-+    |a|    +-+    |1 |    +-+    |2 |    +-+    |3 |    +-+   ~~~~~   ~~~~~    | | SQL SELECT * FROM テーブルA    WHERE a = '1' OR a = '3' 実行結果 マシンA(DB2/UDB V6)    +-+    |a|    +-+    |1 |    +-+    |3 |    +-+ マシンB(DB2/UDB V7)    +-+    |a|    +-+    |1 |    +-+ 因みにUDB以前のDB2・V5でも、 DB2/UDB V6と同じ結果です。 またaについてはindex項目ではありません。 この結果を同じにするにはどうしたらいいか、 ご存知の方がいらっしゃいましたら、 アドバイスをお願いいたします。 (直感で考えるとV6以前の結果のほうが 正しいと思うのですが・・・)

  • SQL文 NULL値に別の値を表示したい

    以下のようなテーブルAがあったとして、 項目Cを抽出する際、キー項目Bが「2」の場合、nullですが、 これを「b」と表示するようにしたいです。 [テーブルA] キー項目B 項目C ------------ 1  a 2  null 3  c 4  d ---------------------------------------------- 項目Cのデータ型が数値の場合は、 SELECT CASE WHEN B IS NULL THEN 0 ELSE B END AS B FROM テーブルA で対応できるようですが、 文字列の場合は、同じような方法があるのでしょうか? 何かご存じの方、お願い致します。

  • EXCELにADOで接続した際のSQLでエラーが出てしまいます(>o<)

    ExcelのワークシートをDBテーブルとして利用しています。 VBAで、ADOを使用してExcelに接続し、SQLでデータを操作したいのですが、3つのテーブルを結合した検索SQLで、 「クエリ式 XXXX の 構文エラー : 演算子がありません。」 というエラーが出てしまいます。 XXXXには、SQL文のJOINしている部分が表示されます。 3つのテーブルのうち、2つのテーブルの結合までは、エラーはなく、結果を取得できます。 テーブルの結合の数やそれ以外に、何か制限があるのでしょうか? ご存知の方がいましたら、ご回答、よろしくお願いします。m(_ _)m

  • 以下のSQLについて

    AccessMDBで、以下のテーブルがあったとします。 テーブル1 ID,NAME 1,おなまえ 2,名前 3,なまえ テーブル2 ID,DB1_ID,NAME,開始日,終了日 1,1,4月,2006/4/1,2006/4/30 2,1,6月,2006/6/1,2006/6/30 3,2,2006年度,2006/4/1,2007/3/31 このとき、以下のように出力したいのですが ID(オートナンバーと仮定),NAME,月,開始日,終了日 1,おなまえ,4月,2006/4/1,2006/4/30 2,おなまえ,6月,2006/6/1,2006/6/30 3,おなまえ,(null),(null),(null) 4,名前,2006年度,2006/4/1,2007/3/31 5,名前,(null),(null),(null) 6,なまえ,(null),(null),(null) 試しにクェリーを作ってみた所、(null)の値を手入力しなければいけないのですが nullをいれさせるようにするには、どのようにしないといけないでしょうか? #テーブルをいじることはできず、SQLのみで対処することを考えています。 SELECT テーブル1.NAME, テーブル2.NAME, テーブル2.START, テーブル2.END FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.ID=テーブル2.DB1_ID UNION SELECT テーブル1.NAME, テーブル2.NAME,テーブル2.START,テーブル2.END FROM テーブル1; よろしくお願いします。

  • SQLを教えてください。

    以下に5つのテーブルがあるとします。 (1)全体テーブル  ・登録順番号(Key)  ・登録名 (2)商品テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・品名 (3)商品単価テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・登録順番号(Key)  ・商品単価 (4)新_商品単価テーブル  ・項目コード(Key)  ・品名コード(Key(Key))  ・商品登録順番号  ・商品サイズ(Key)  ・登録順番号(Key)  ・新_商品単価 (5)詳細テーブル  ・登録順番号(Key)  ・品名コード(Key)  ・原価項目コード(Key)  ・商品数量A  ・商品数量B 上記のテーブルから、以下の条件に合致する「(1)の登録名」「(2)の品名」「(4)の新_商品単価×(5)の商品数量※」を取得したい。 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 【条件1】全てAND条件 新_商品単価テーブルの項目コードが100  新_商品単価テーブルの品名コードが50 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※<0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 上記で抽出出来るレコードに加えて、以下 【条件2】全てAND条件 新_商品単価テーブルの項目コードが200~300あるいは400~500 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※=0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A どのようなSQLで抽出できますでしょうか?? DBはAccessです。

  • SQLを教えてください

    MS-ACCESSにて以下のような条件のSQLを教えてください 年月日、数量の2つのカラムがあります 年月日 数量 1/1  100 1/2  150 1/3  120 1/4  200 年月日には、順番に年月日が入っています 数量には、いろいろな数値が入っています ここで年月日の最新200件のレコードで ......select top 200 order by 年月日 desc 当日の数量が前日の数量より大きいものの数と小さいものの数 .......count(*) where 当日の数量 > 前日の数量 where 当日の数量 < 前日の数量 例の場合だと 1/2は1/1の数量より大きい 1/3は1/2の数量より小さい 1/4は1/3の数量より大きい 結果としてカウントした値は 大きい=2 小さい=1 を求めたいと思います ひとつのSQLで、できればいいのですが 大きいのひとつ 小さいのひとつ の二つのSQLでもいいです よろしく、お願いします

  • SQLについて教えてください

    お世話になっております。 以下、取得したい内容です。 この内容に対して、どのようにSQLを書けばよいか良いか教えて頂きたいです。 (1)DBの全テーブルに対して特定のカラムを取得したい。(カラム名はA,Bとする) (2)取得したカラム.Aに格納されている各値に対して、カラム.Bの各レコードの項目には何の値が格納されているか知りたい。 DBはオラクルですが、オラクルでしか使えないSQL構文はつかないようにしたいです。 自分で考えたSQLは、 SELECT A,B FROM * GROUP BY A,B ですが、そもそも全テーブルを指定する際に使用するのが、「*」では正しくないような気もします。 説明がつたなくて申し訳ございません。 宜しくお願い致します。 ・テーブルイメージ テーブル.test1 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 3 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test2 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 1 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test3 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 3 | | 02 |AA| 1 | | 03 |AC| 2 | | 04 |AC| 3 | +--------+------+

  • SQLでデータを1件だけ取得したいのですが。

    SQLでデータを1件だけ取得したいのですが。 以下のようなテーブルが2つあるとします。 ------------------------------------ テーブルA     テーブルB   値X           値X    値Y   1           1    20   2           2    NULL   3           2    60   4           2    70               4    NULL               4    NULL ------------------------------------ ここで、テーブルAの値Xと、テーブルBの値Xをリンクさせます。 テーブルAにデータがあれば、テーブルBに無くても出力します(外部結合イメージ) テーブルAの値Xに対して、テーブルBの値Xは2件以上リンクされる可能性があります。 この場合は1件のみ出力します。 その1件の決め方は、テーブルBの値YがNULLでは無く最大の物です。 但し値Yは全てNULLの可能性もあるので、その場合NULLとして1件出力します。 上記の出力イメージ ------------------------------------  値X    値Y  1    20  (1件の場合そのまま出力。1件がNULLでもそのまま出力)  2    70  (NULLではない最大の1件を出力)  3    NULL  (テーブルBになくても出力)  4    NULL  (値が全てNULLの場合、NULLとして1件出力) ------------------------------------ どのようなSQLを記載すれば実現可能でしょうか?

  • DBを問わないSQLのチューニングが学べる本はありますか?

    以下のSQLはほぼ全てのDBで使用できると思いますが どちらが高速なのでしょうか?このような、 DBを問わずにSQL文に関する基礎的なチューニングが学べる本はありますでしょうか? (1)JOINを使わずに結合 select * from A,B,C WHERE A.a=B.a AND A.b =C.b (2)JOINを使用して結合 select * from A left join B on A.a=B.a left join C on A.b=C.b