繁体   English   中英

LEFT OUTER JOIN不返回NULL值

[英]LEFT OUTER JOIN not returning NULL values

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

SQL小提琴

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)

我的结果如下所示:

在此处输入图片说明

我想要的结果将是这样的:

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

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

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

您可以更改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;

你可以试试这个 前面已经回答了, months应该是可以在表left join在编。 另外, count应在stat_summary表的adp列或month(s.report_date)列上。

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

如果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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM