• 締切済み

SQLで該当しないデータに0を返したい。

SQLでLEFT OUTER JOIN を使ってファイルを結合し、グリッド上に表示させようと思ったのですが、 片方に該当しないデータがあった場合にそのセルだけ何も出ない状態になります。計算に使う数字フィールドなので、該当データがない場合には0をいれておきたいのですが。 どのようにしたらよいでしょうか。

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

coalesce関数を使えばいいのではないでしょうか。 select coalesce(該当の項目,0) from table; といった感じです。 もしくはcase式を使って select case 該当の項目 is not null then 該当の項目 else 0 end from table; でもいいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQLの結合

    SQLの結合を行う際にwhereで結合する場合とfromないでleft joinなどで結合を行う場合ではどちらのほうが処理が早いのでしょうか?

  • SQL 外部結合について

    EXCELでODBC接続で外部データを取り込み、クエリテーブルを作成するところまではできるのですが、MicrosoftQueryを使って外部結合をしようとすると、テーブルが3個以上ある場合は外部結合できませんとエラーが表示されます。 直接SQLをさわれば出来るのかと思い、 SELECT フィールド名1, フィールド名2, ... FROM (((TABLE1 LEFT JOIN TABLE2 ON TABLE1.NO = TABLE2.NO)LEFT JOIN TABLE3 ON TABLE1.NO = TABLE3.NO)LEFT JOIN TABLE4 ON TABLE1.NO = TABLE4.NO)LEFT JOIN TABLE5 ON TABLE1.NO = TABLE5.NO を入力したのですが、「ORA-00942: 表またはビューが存在しません」というエラーが発生しました。 いろいろ調べてみたのですが全くの初心者なもので本当に困っております。 どなたかアドバイス等よろしくお願いします。

  • SQLパススルークエリーについて

    SELECT 車輌MST.車輌コード, 車輌MST.車輌番号,社員MST.個人コード , ARBEITMST.個人コード AS 個人コード FROM 車輌MST LEFT OUTER JOIN 社員MST ON 車輌MST.個人コード = 社員MST.個人コード LEFT OUTER JOIN ARBEITMST ON 車輌MST.個人コード = ARBEITMST.個人コード; 上記の内容にて実行すると、社員MST.個人コードとARBEITMST.個人コードが別フィールドとして表示されてしまいます これをクエリーで使う&で結合したい場合、(同じフィールドで社員・ARBEITを表示)するにはどうしたらいいのでしょうか? 単に&で結合すると実行できませんでした(エラーが出る) わかりにくい説明かもしれませんが、宜しくお願いします

  • 複数の外部結合

    こんにちは、外部結合の仕方についてお聞きしたいのですが、 このSQL1で抽出されたデータにさらに TABLE3テーブルのデータを追加したくSQL2を作成したのですが、 うまくいきません。 ON TABLE1.[Code]=TABLE3.[Code]の部分をどのように記述すればよいのでしょうか? SQL1--------- TABLE1.[tamp] [Child], TABLE2.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] SQL2---------- TABLE1.[tamp] [Child], TABLE2.*, TABLE3.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] LEFT OUTER JOIN [p].[Product] TABLE3 ON TABLE1.[Code]=TABLE3.[Code]

  • SQL文で教えてください

    Left join と Right join の両方の機能をもった、一つのSQL文はどうしたらいいのでしょうか。 つまり、Left join は左側のテーブルを基準とし右にないものでも右の部分はNUllのままで抽出しますが、双方にあるものは統合して出力し、片方に無いものは、ない部分だけNullで、とにかく両方を抽出するというSQL文が書けないかと思案しています。

  • 9iのSQL:1999構文を使用した外部結合について

    内部結合の結果とともに、左側の表の持つ一致しない行を戻す結合を左側外部結合、右側の表の持つ一致しない行を戻す結合を右側外部結合と言います。 LEFT OUTER JOIN, RIGHT OUTER JOINキーワードを使用します。 例)SELECT D.部署NO,D.部署名,D.場所,E.従業員,E.従業員名 FROM 部署 D LEFT OUTER JOIN 従業員 E ON (D.部署NO = E.部署NO) ; というかんじでマニュアルに記載されていますが、どこを基準に右側の表とか左側の表とかいっているのか説明だけでは理解できません。どなたか解りやすく教えてください。

  • 結合SQLに関して

    結合SQLに関して ある3つのテーブルが存在し、TABLE1の情報を核として、TABLE2,TABLE3と 結合させて情報を取得しようと考えています。 TABLE1とTABLE2だけであれば LEFT OUTER JOIN等を駆使すれば、TABLE1を核として 全件表示可能かと思いますが、TABLE3も含めて結果のような形にしたい場合は、 どのようにSQLを記述すれば良いでしょうか。。。。 初歩的な質問で申し訳ありませんが、教えて下さい。 TABLE1 NO 1 2 3 TABLE2 NO,BUSYO_CODE 1,123 2,123 3,456 TABLE3 BUSYO_CODE,BUSYO_NAME 123,総務 456,経理 結果 NO,BUSYO_CODE,BUSYO_NAME 1,123,総務 2,123,総務 3,456,経理 よろしくお願いします。

  • PL/SQLについて

    オラクル初心者ですが、他人が作ったSQLのWhere分で下記表記があります。 どういう意味でしょうか? where テーブル1.フィールド名1 = テーブル2.フィールド名1(+) AND テーブル1.フィールド名1 = テーブル3・フィールド名1(+) AND テーブル1.フィールド名1 = テーブル4.フィールド名1(+) AND ・・・・・続く ネットで調べると、結合の書き方のようですが、この場合どういった結合となるのでしょうか? 例えば、通常結合の場合、 SELECT テーブル1.フィールド1, テーブル2.フィールド1, テーブル3,フィールド1 FROM テーブル1 JOIN テーブル2 ON テーブル1.フィールド1=テーブル2.フィールド1 JOIN テーブル3 ON テーブル1.フィールド1=テーブル3.フィールド1 同様と考えてよろしいのでしょうか?

  • sqlのusingについて

    SQL92標準の select * from a left outer join b using(column) の様にusingはsqlserverでは使用できないのでしょうか? on a.column = b.columnは出来ますが。。。 書き方が悪いのか、sqlserverはSQL92標準ではないのか、そもそもusingはSQL92標準ではないのか。色々webで調べてましたが、わかりませんでした。どなたか教えて下さい。

  • Accessの表結合SQL

    AccessのSQLで外部結合を複数使うと SQLがエラーになります。 クエリで確認してエラーにならない様につくってみましたが、意図する事をやろうとするとエラーになります。 どこが悪いか教えていただけませんか?おそらくSQLサーバーでは余裕で通るSQLだと思うのですが。。。 SQL = SELECT * FROM T1 LEFT JOIN T2 ON T1.A = T2.A LEFT JOIN T3 ON T1.B = T3.B LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' やりたいのはT1を基準にT2,T3,T4からデータを引っ張ってきたい。その条件としてT4から引っ張ってくるのは T4.DがiNumである事、基準となるT1のT1.EがiNumである事です。 Accessでは"AND T4.D = iNum"がだめで、 WHERE区に書くと外部結合にもかかわらずT4.D = iNumのデータしか抽出されなくなる。(T1.C = T4.CのデータがT4.D = iNumでなくてもT1のデータが抽出されなくてはならない。) さらに SQL = SELECT * FROM ((T1 LEFT JOIN T2 ON T1.A = T2.A) LEFT JOIN T3 ON T1.B = T3.B) LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' こんな括弧が必要になってくる。 これだとT1とT2を外部結合した結果をT3と外部結合して さらにその結果をT4と外部結合しているという意味あいになってしまって、意図が違うのですが。。 結果は同じなのでAccessに譲ってやってもいいのですが 前者はT1で抽出されなければならないデータが抽出されないので困ります。 よろしくお願いいたします。