当没有匹配的记录时强制返回'0'

时间:2013-11-11 09:43:00

标签: sql ms-access

背景

我在Access数据库中有一个表(我们称之为[tblMyTable])。该表每月有数千个条目,每个条目属于一个类别,例如:

ID  Month  Category
--  -----  --------
 1      1  White
 2      1  Black
 3      2  White
...etc.

问题:

当我运行我的(稍微简化)查询时

SELECT tblMyTable.Month, COUNT(tblMyTable.ID) AS CountedIDs 
FROM tblMyTable 
WHERE tblMyTable.Category = "Black" 
GROUP BY tblMyTable.Month

回报是:

Month  Count
-----  -----
    1      1

而我期望/需要的是:

Month  Count
-----  -----
    1      1
    2      0

我尝试使用NZ()函数强制返回“0”,但也没有任何运气,因此在这里与所有人联系......

如果遗失任何内容或看起来很奇怪,请大声喊出来,我会尽力解决。

1 个答案:

答案 0 :(得分:1)

创建一个名为[MonthNumbers]的表,如此

MonthNumber
-----------
          1
          2
          3
          4
          5
          6
          7
          8
          9
         10
         11
         12

然后使用以下查询(其中包含原始查询作为子查询):

SELECT 
    mn.MonthNumber AS Month,
    Nz(gb.CountedIDs, 0) AS CountedIDs
FROM
    MonthNumbers mn
    LEFT JOIN
    (
        SELECT 
            tblMyTable.Month, 
            COUNT(tblMyTable.ID) AS CountedIDs 
        FROM tblMyTable 
        WHERE tblMyTable.Category = "Black" 
        GROUP BY tblMyTable.Month
    ) gb
        ON gb.Month = mn.MonthNumber

返回

Month  CountedIDs
-----  ----------
    1  1         
    2  0         
    3  0         
    4  0         
    5  0         
    6  0         
    7  0         
    8  0         
    9  0         
   10  0         
   11  0         
   12  0