我假设您在结果集中询问与表中没有数据的月份相对应的行。
首先,您误用了GROUP BY 的MySQL 扩展。请阅读这个。 http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html 当您滥用该扩展程序时,我们和服务器都很难猜测您想要什么。
第三,您的WHERE 子句中不需要DATE_FORMAT() 内容。可以直接比较日期。
第三,您需要一个包含从 1 到 12 的所有数字的表。这在简单的查询中很容易生成,如下所示。稍后我们将使用它。
SELECT 1 AS seq UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION
SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
第四,您需要将您的数字列表加入到您的其他表格中。
SELECT seq.seq as Month,
MONTHNAME(CONCAT( YEAR(NOW()), '-', seq.seq, '-01')) as Month_Name,
year(ENC_DT) as Year
COUNT(*) as ENC_Record_Count
FROM (
SELECT 1 AS seq UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION
SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
) AS seq
LEFT JOIN IDR_ENC AS ENC ON seq.seq = MONTH(ENC.ENC_DT)
where ENC.ENC_DT >= '2014-01-01'
and ENC.ENC_DT <= '2014-10-16'
group by year(ENC.ENC_DT),seq.seq
order by year(ENC.ENC_DT),seq.seq
只要您只选择一个日历年内的日期,这将起作用——我们只有十二个月的整数。
从整数中获取月份名称有些棘手。
有关此类查询的更详细讨论,请参阅此内容。 http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/