LEFT OUTER JOIN不返回NULL值

时间:2015-09-30 13:53:11

标签: sql sql-server sql-server-2008

我有一个非常简单的示例查询,我正在尝试完成。

SQL Fiddle

SELECT
    month(s.report_date),
    COALESCE(COUNT(*),0)
FROM
    stat_summary s LEFT OUTER JOIN ref_months m on MONTH(s.report_date) = m.month_id
GROUP BY month(s.report_date)

我的结果如下:

enter image description here

我想要的结果是:

month  | count
----------------
    1  | 0
    2  | 0
    3  | 0
    4  | 0
    5  | 0
    6  | 0
    7  | 0
    8  | 0
    9  | 4
    10 | 9
    11 | 0
    12 | 0

4 个答案:

答案 0 :(得分:3)

您需要使用月表作为主要表:

Dim Street as String

答案 1 :(得分:0)

您可以更改LEFT JOIN表格顺序,而不需要COALESCE

<强> SqlFiddleDemo

SELECT
    m.month_id,
    [count] = COUNT(s.report_date)
FROM ref_months m 
LEFT JOIN stat_summary s 
    ON MONTH(s.report_date) = m.month_id
GROUP BY m.month_id;

答案 2 :(得分:0)

您可以尝试this。如前所述,months应该是left join的表格。此外,count应位于adp列或month(s.report_date)表格中的stat_summary列。

SELECT
m.month_id,
COALESCE(COUNT(adp),0)
FROM ref_months m LEFT OUTER JOIN stat_summary s 
on MONTH(s.report_date) = m.month_id
GROUP BY month(s.report_date),m.month_id

答案 3 :(得分:0)

如果您的ref_months表中的月份不存在,您可以使用主数据库创建。

Select m.Number as m_MonthID
COALESCE(COUNT(*),0) as count
from FROM Master.dbo.spt_Values m
left join stat_summary s 
ON MONTH(s.report_date) = m.Number
where m.name is null
and m.number between 1 and 12
GROUP BY m.Number