一尘不染

MySQL-填写缺少月份的行

mysql

天哪,它必须是如此简单,但我正在为“填写缺失的数据”问题而苦苦挣扎。

我有一个表,该表具有以下带有一些插入数据的列。

TABLE

year  month  payment
2014    3      100
2014    5      800
2014    9      200

我想要的这张表是从2014年起的全部月份的付款值。

Month    Payment
  1        0
  2        0
  3       100
  4        0
  5       800

  ...

  12       0

我尝试在select中使用IFNULL,但失败如此严重…而且stackoverflow的搜索结果通常会结合两个或多个表来处理信息。解决这个问题的最快,最好的解决方案是什么?


阅读 252

收藏
2020-05-17

共1个答案

一尘不染

对于缺少的月份,您可以对所有月份进行联合查询,并与表联接

SELECT 
t1.`year`,
t.`month`,
coalesce(t1.payment,0) payment
FROM
(SELECT 1 AS `month`
UNION 
SELECT 2 AS `month`
UNION 
....
SELECT 12 AS `month`
) AS t
LEFT JOIN your_table t1 on(t.`month` = t1.`month`)
WHERE ....

Fiddle Demo

2020-05-17