- ベストアンサー
副問い合わせでのNULLの抽出方法
SQLについての質問です。 副問い合わせを使用したとき、NULLのデータも含めて抽出したいの ですが、どうもうまくいきません。 やりたいことを説明すると、まず以下の構造のテーブルがあります テーブル コード 金額 -------------- 01 |100 01 |110 02 |090 02 |080 03 |200 04 |100 04 |150 05 |400 09 |350 null |100 null |200 集約後データ コード -------- 01 |<--- 1件目 02 |<--- 2件目 03 |<--- 3件目 04 |<--- 4件目 05 |<--- 5件目 09 |<--- 6件目 null |<--- 7件目 まず、テーブルをコードで集約します。集約された結果のデータで上位○件と いう制御をかけたい為、ROWNUMを使用しています。 ただ、実際にほしいデータは集約する前のデータの為、一度集約とROWNUMを使って 絞りこんだデータを副問い合わせしています。 但し、このときNULLが入ったコードも取得する必要があります。 現在のSQLはこんな感じです。 SELECT コード、SUM(金額) FROM テーブル WHERE コード IN ( SELECT コード FROM テーブル WHERE ROWNUM <= 10 GROUP BY コード ) GROUP BY コード このSQLだと、NULLが省かれてしまうため上位6件までしか抽出できません。 実際、NULLを含んだデータを副問い合わせで取得することは可能でしょうか? データベースはオラクル9iです。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT A.コード, SUM(A.金額) FROM テーブル A, ( SELECT DISTINCT NVL(コード, '*') AS コード FROM テーブル WHERE ROWNUM <= 10 ) B WHERE NVL(A.コード, '*') = B.コード GROUP BY A.コード; こんな感じでどうでしょう。
その他の回答 (1)
- taknt
- ベストアンサー率19% (1556/7783)
WHERE コード IN を WHERE コード(+) IN というふうにできるかな?
補足
早速の回答、ありがとうございます。 確認してみましたが、ダメでした。 副問い合わせに対しての外部結合は無理のようです。
お礼
できました!!ありがとうございます。 NVLは知っていたのですが、フィールドと 条件の両方にかける方法は思いつかなかったです。 回答でもらったSQLは使わなかったのですが、参考にして 元のSQLを以下のように改造して成功しました。 SELECT コード、SUM(金額) FROM テーブル WHERE nvl(コード,'*') IN(SELECT nvl(コード,'*') FROM テーブル WHERE ROWNUM <= 10 GROUP BY コード ) GROUP BY コード 本当にありがとうございました。今日は徹夜せずに 帰れそうです。