1

我在 SQL 中创建月份->计数选择查询时遇到了困难。

基本上,我有一个条目列表,所有条目都有一个与之关联的日期。我想要的最终结果是一个包含 12 行(每个月一个)的列表,每行将包含月份编号(1 表示 1 月,2 表示 2 月等),以及有多少条目的计数该月设置为日期。像这样的东西:

Month - Count
1     - 12
2     - 0
3     - 7
4     - 0
5     - 9
6     - 0

我可以获得包含计数高于 0 的月份的结果,但如果月份不包含任何条目,则不会创建该行。我只是通过做得到这个结果

SELECT Month(goalDate) as monthNumber, count(*) as monthCount 
FROM goalsList 
WHERE Year(goalDate) = 2012 
GROUP BY Month(goalDate) 
ORDER BY monthNumber

在此先感谢您的帮助!

4

1 回答 1

2

试试这样的,

SELECT a.monthNo, COUNT(b.goalDate)
FROM (
        SELECT 1 monthNo UNION SELECT 2 monthNo
          UNION
        SELECT 3  monthNo UNION SELECT 4 monthNo
          UNION
        SELECT 5  monthNo UNION SELECT 6 monthNo
          UNION
        SELECT 7  monthNo UNION SELECT 8 monthNo
          UNION
        SELECT 9  monthNo UNION SELECT 10 monthNo
          UNION
        SELECT 11  monthNo UNION SELECT 12 monthNo
      )  a LEFT JOIN goalsList b
            ON a.monthNo = CAST(month(b.goalDate) as SIGNED)
GROUP BY a.monthNo
ORDER BY a.monthNo;

想法是在临时表中创建月份编号的记录列表,并将其与表连接起来goalsList。(假设 OP 没有月份数字表

SQLFiddle 演示

于 2012-09-26T03:30:54.500 回答