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

我必须选择两个日期之间的值,然后我必须使用这个语句找到计数。

 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 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 回答
0

这是您的查询,格式正确。每个 SELECT 语句只能有一个 WHERE 子句,并且 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 列,您需要在常量中输入格式正确的日期。如果 DATE 1 和 DATE 2 是列名,那么您需要反引号,而不是单引号,如下所示:

cdate BETWEEN `DATE 1` AND `DATE 2`

您应该考虑阅读有关SELECT 语法的文档。

于 2012-06-08T12:06:45.077 回答