来自同一列但不同条件的SQL计数获取所有列的稍后计数结果

来自同一列但不同条件的SQL计数获取所有列的稍后计数结果,sql,Sql,我试图对不同条件下的同一列进行计数,但对其他条件也会得到稍后的计数结果 对于此sql: select count(eqa.ID) as gold_yes from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'Yes' and eqa.QU_TYPE = 'abc'; 我正在获得输出gold\u是:

我试图对不同条件下的同一列进行计数,但对其他条件也会得到稍后的计数结果

对于此sql:

select count(eqa.ID) as gold_yes  from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa 
where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'Yes' and   eqa.QU_TYPE = 'abc';
我正在获得输出
gold\u是:
1

同样,如果我在不同的条件下运行sql:

select count(eqa.ID) as gold_no  from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa 
where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'No' and  eqa.QU_TYPE = 'abc';
我正在获取输出
gold\u编号:
0

现在,如果运行sql组合:

select count(eqa.ID) as gold_yes ,count(eqa_2.ID) as gold_no  from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa ,EC_SECTION_ANSWER esa_2 , EC_QUESTION_ANSWER eqa_2 
where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'Yes' and   eqa.QU_TYPE = 'abc'
and esa_2.SC_NUMBER = 1079 and esa_2.ID = eqa_2.SC_ID and eqa_2.QU_ANSWER = 'No' and eqa_2.QU_TYPE = 'abc'; 
我正在获取输出:
gold\u是:
0
gold\u否:
0
。哪个应该是
gold\u是:
1
gold\u否:
0

谁能告诉我我犯了什么错误吗


提前谢谢

where
子句中的条件放入
案例中
,并对其进行汇总

select sum(case when esa.SC_NUMBER = 1079 
                     and eqa.QU_ANSWER = 'Yes' 
                     and eqa.QU_TYPE = 'abc'
                then 1
                else 0
           end) as gold_yes
...
from EC_SECTION_ANSWER esa
join EC_QUESTION_ANSWER eqa on esa.ID = eqa.SC_ID

查询中的
WHERE
条件是问题所在:您不能同时拥有
eqa.QU\u ANSWER='Yes'
eqa.QU\u ANSWER='No'
,因此查询返回0行,并且0行的值计数也为0

您可以将条件更改为
,也可以在
计数
中采用相同的条件,同时还应将查询更改为使用显式的
联接
,而不是在
WHERE
子句中写入联接条件

SELECT COUNT(CASE WHEN eqa.QU_ANSWER = 'Yes' THEN 1 ELSE NULL END) as gold_yes
     , COUNT(CASE WHEN eqa.QU_ANSWER = 'No' THEN 1 ELSE NULL END) as gold_no
FROM   EC_SECTION_ANSWER esa
       INNER JOIN EC_QUESTION_ANSWER eqa ON esa.ID = eqa.SC_ID
WHERE  esa.SC_NUMBER = 1079 
  AND  eqa.QU_TYPE = 'abc'; 
试试这个:

SELECT SUM(CASE WHEN (esa.SC_NUMBER = 1079 and 
                      esa.ID = eqa.SC_ID   and 
                      eqa.QU_ANSWER = 'Yes'and  
                      eqa.QU_TYPE = 'abc') 
           THEN 1 END) AS eqacount1
       SUM(CASE WHEN (esa.SC_NUMBER = 1079 and 
                      esa.ID = eqa.SC_ID   and
                      eqa.QU_ANSWER = 'No' and 
                      eqa.QU_TYPE = 'abc') 
          THEN 1 END)  AS eqacount2 
from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa
: 它会工作的,检查一下

问候,,
Praveen Nelge

您已将连接条件移动到聚合函数中。这对性能来说真是个坏主意。
SELECT SUM(CASE WHEN (esa.SC_NUMBER = 1079 and 
                      esa.ID = eqa.SC_ID   and 
                      eqa.QU_ANSWER = 'Yes'and  
                      eqa.QU_TYPE = 'abc') 
           THEN 1 END) AS eqacount1
       SUM(CASE WHEN (esa.SC_NUMBER = 1079 and 
                      esa.ID = eqa.SC_ID   and
                      eqa.QU_ANSWER = 'No' and 
                      eqa.QU_TYPE = 'abc') 
          THEN 1 END)  AS eqacount2 
from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa