1

我正在尝试创建一个选择存储过程来返回一个值的计数不同实例。但是,如果不存在不同的实例,它应该返回 0。以下查询几乎可以满足我的所有需求

SELECT br.barangay,COUNT(DISTINCT cr.cr_patient_no) as `amount`
FROM barangay as br LEFT JOIN case_report_main as cr  on cr.cr_barangay = br.barangay
GROUP BY br.barangay 
ORDER BY br.barangay  ASC

此代码返回包含位置名称的列“barangay”和“计数”列。但是,我还需要能够使用 WHERE 子句搜索它们。

WHERE cr.cr_date_onset BETWEEN '2010-01-01' AND '2014-12-12'

我需要一个包含 0 数量的结果,如下所示:

'NAME1'|'1'
'NAME2'|'0'
'NAME3'|'4'
'NAME4'|'0'

但是当我添加 WHERE 子句时,它会删除数量为 0 的所有结果。

'NAME1'|'1'
'NAME3'|'4'

有人可以为此提供解决方案吗?

4

3 回答 3

3

把它放在你的 WHERE 子句中:

cr.cr_date_onset IS NULL OR cr.cr_date_onset BETWEEN '2010-01-01' AND '2014-12-12'
于 2013-02-23T08:12:10.617 回答
3

您需要在子句上添加该条件ON,而不是在WHERE子句上

SELECT  br.barangay,
        COUNT(DISTINCT cr.cr_patient_no) AS `amount`
FROM    barangay AS br
        LEFT JOIN case_report_main AS cr
            ON  cr.cr_barangay = br.barangay AND
                cr.cr_date_onset BETWEEN '2010-01-01' AND '2014-12-12'
GROUP   BY br.barangay
ORDER   BY br.barangay ASC
于 2013-02-23T08:08:41.300 回答
0

试试这个查询:

    SELECT br.barangay,ifnull(COUNT(DISTINCT cr.cr_patient_no),0) as `amount`
    FROM barangay as br LEFT JOIN case_report_main as cr  on cr.cr_barangay = br.barangay 
    where cr.cr_date_onset between '2010-01-01' and '2014-12-12'
    GROUP BY br.barangay 
    ORDER BY br.barangay  ASC
于 2013-02-23T08:08:30.633 回答