admin

如何根据月份的总和来填充一个空的月份?[复制]

sql

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

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

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的搜索结果通常会结合两个或多个表来处理信息。解决这个问题的最快,最好的解决方案是什么?


阅读 138

收藏
2021-07-01

共1个答案

admin

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

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

2021-07-01