1

usersという名前のテーブルがあります。

id   name date       cdate           c  a   b
1     rz  42121221  42121221         0  1   0
2     an  12122111  42121221         0  0   1
3     cb  22121221  42121221         1  1   1   
4     ss  3321221   42121221         1  0   0

2つの日付の間の値を選択する必要があり、次にこのステートメントを使用してカウントを見つける必要があります。

 SELECT COALESCE(SUM(IF(c=1 AND a=0 AND b=1  ,  1, 0)),0) AS ACTIVE
   WHERE DATE BETWEEN 'DATE 1' AND 'DATE 2',
 COALESCE(SUM(IF(c=0 AND a=0 AND b=1  ,  1, 0)),0) AS INC
   WHERE cdate BETWEEN 'DATE 1' AND 'DATE 2'
 FROM users where dealer id='2'

このクエリは機能していません。

4

2 に答える 2

0

これが適切にフォーマットされたクエリです。SELECTステートメントごとに持つことができるWHERE句は1つだけであり、FROM句はSELECT句の後、WHERE句の前にあります。

 SELECT SUM(IF(c=1 AND a=0 AND b=1 AND DATE BETWEEN 'DATE 1' AND 'DATE 2', 1, 0)) AS ACTIVE,
   SUM(IF(c=0 AND a=0 AND b=1 AND cdate BETWEEN 'DATE 1' AND 'DATE 2', 1, 0)) AS INC
 FROM users
 WHERE DATE BETWEEN 'DATE 1' AND 'DATE 2'
   OR cdate BETWEEN 'DATE 1' AND 'DATE 2'

日付の比較をIFステートメントにコピーしました。

また、この場合は冗長であるため、COALESCE句を削除しました。SUMは常に値を返します。

SELECT句の後に、列をコンマで区切ってまとめました。

何をしようとしているかによっては、WHERE句を今すぐ削除することをお勧めします。

私も疑っていcdate BETWEEN 'DATE 1' AND 'DATE 2'ます。cdateがDATETIME列の場合、定数に適切にフォーマットされた日付を入力する必要があります。DATE1とDATE2が列名の場合、次のように一重引用符ではなく、バックティックが必要になります。

cdate BETWEEN `DATE 1` AND `DATE 2`

SELECT構文に関するドキュメントを読むことを検討する必要があります。

于 2012-06-08T12:06:45.077 に答える
0

私は1つのクエリであなたのニーズを達成するためにこのようなことをしたでしょう:

試してみる :

SELECT COALESCE(SUM(IF(u1.c=1 AND u1.a=0 AND u1.b=1, 1, 0)),0) AS ACTIVE,
COALESCE(SUM(IF(u2.c=0 AND u2.a=0 AND u2.b=1, 1, 0)),0) AS INC
from user u1
left outer join user u2 on u1.row_id = u2.row_id
where u1.DATE BETWEEN 'DATE 1' AND 'DATE 2' and
u2.cdate BETWEEN 'DATE 1' AND 'DATE 2'
于 2012-06-08T12:13:30.250 に答える