• ベストアンサー

PLSQLで集合に対して、条件つきでカウントしたい

PLSQLで質問です。 GROUP BYで集合値にしたSQL文である条件のものだけの人数だけしりたい のですが、うまくできません。ご教授おねがいします。 例) 会社  氏名     金額1     金額2 A    ○○     1000    0 A    △△      200    300 A    ××     1300    400 A    ■■      400    300 というテーブルがあって、会社別の合計金額と人数をしりたいのですが、 上でいうと、金額2が0以外の人の人数をしりたいのです。 結果的には 会社   人数   合計金額    金額2がゼロ以外の人数 A     3    2500     2 B     1    400      1 になってほしいです。 会社でGROUP BYして 社員をCOUNTで人数だして、 SUMで合計金額 はだせるまではいいのですが、金額2の人数をだすやり方がわかりません。 条件がつけれるcount関数があればいいのですが。。。 よろしくお願い致します。

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

  • ベストアンサー
  • ppg-2
  • ベストアンサー率39% (77/193)
回答No.2

select句で入れ子のsqlを使用すればできると思います。 select t1.cmp,count(t1.*),sum(t1.money1),select count(t2.*) from t2 where t1.cmp = t2.cmp and money2 <> 0 group by cmp) from t1 group by t1.cmp こんな感じに。

-Rena-
質問者

お礼

お返事ありがとうございます。 入れ子もやってみたのですが、うまくいきませんでした。 こんな感じで書くのですね。 やってみたらできました。 ありがとうございました。

その他の回答 (1)

noname#19197
noname#19197
回答No.1

PL/SQLということは、Oracleでしょうか? それでしたら、DECODE関数が使えると思います。 SUM(DECODE(金額2, 0, 0, 1)) でどうでしょうか。 もしくは、Oracleのバージョンによって使えるか不確かですが、CASE文が使えたと思います。

-Rena-
質問者

お礼

ありがとうございます。 いろいろやってみて、このやり方で対応しました。 ありがとうございました。