2016-10-24 9 views
0

複数の条件のデータセットに対して全体的なカウント機能を実行しようとしていますが、問題が発生しています。私は初心者で、単純なカウント機能を使用してみましたが、運がないです。私はケースを使用して調べましたが、それに問題があります。誰もこのコードについてどうすればいいのか知っていますか?ここで複数の条件を持つカウント関数

は、私のテーブルの例である:

Name | Date  | Status | Candy | Soda | Water 
Nancy | 10/19/16 | active | 2 | 0 | 1 
Lindsy| 10/20/15 | active | 0 | 1 | 0 
Erica | 10/20/13 | active | 0 | 2 | 3 
Lane | 10/19/14 | active | 0 | 0 | 4 
Alexa | 10/19/16 | notactive | 0 | 5 | 1 
Jenn | 10/19/16 | active | 0 | 0 | 0 

私がいることを条件の下での名前の全体的な数を行うために探しています:(doesnのキャンディ、ソーダ、または水のいずれかがゼロ以外でありますこれらの3つのうちの1つがゼロでない場合)、そのアカウントは有効であり、日付が過去2年間(10/2014 - 10/2016)に収まる場合も同様です。

私は、クエリがカウント合計が3だったことを教え、また私を見せたいでしょう:

Name | Date  | Status | Candy | Soda | Water 
    Nancy | 10/19/16 | active | 2 | 0 | 1 
    Lindsy| 10/20/15 | active | 0 | 1 | 0 
    Lane | 10/19/14 | active | 0 | 0 | 4 
+0

3つの列のうちの1つだけがゼロでないか、_any_列がゼロでないレコードが必要ですか? –

+0

いずれかの列がゼロでない場合 –

+1

MySQLまたはOracle?私はそれが両方であるとは思わない。 – sstan

答えて

0
SELECT * 
FROM yourTable 
WHERE (Candy > 0 OR Soda > 0 OR Water > 0) AND 
     Status = 'active' AND 
     Date BETWEEN '2014-10-01' AND SYSDATE 
0

これらの異なる2つの質問です。行を取得するための基本的な考え方は次のとおりです。

select t.* 
from t 
where greatest(candy, soda, water) > 0 and 
     status = 'active' and 
     date >= curdate() - interval 2 year; 

(。オラクルでは、あなたがsysdateではなくcurdate()を使用することができます)

をカウントを取得するには、selectcount(*)ではなく*を使用します。 SQL問合せは、1つの結果セットのみを戻します。 。 。あなたはすべての行をまたはのいずれかに集計します。

関連する問題