- ベストアンサー
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関数があればいいのですが。。。 よろしくお願い致します。
- みんなの回答 (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 こんな感じに。
その他の回答 (1)
PL/SQLということは、Oracleでしょうか? それでしたら、DECODE関数が使えると思います。 SUM(DECODE(金額2, 0, 0, 1)) でどうでしょうか。 もしくは、Oracleのバージョンによって使えるか不確かですが、CASE文が使えたと思います。
お礼
ありがとうございます。 いろいろやってみて、このやり方で対応しました。 ありがとうございました。
お礼
お返事ありがとうございます。 入れ子もやってみたのですが、うまくいきませんでした。 こんな感じで書くのですね。 やってみたらできました。 ありがとうございました。