簡體   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