我的表格如下:但我想要的是以下输出:从最短日期到最长日期的每一天都应出现每个姓名的记录。如果原始表中不存在该记录,则应在特定日期将其值更新为0。我想不出这个问题的答案。请。有谁能建议我写这个问题。提前谢谢。。!
aij0ehis1#
如果表中有所有日期,则可以使用原始表中的数据。使用 cross join 生成行,然后 left join 引入价值观:
cross join
left join
select n.name, d.date, coalesce(t.value, 0) as value from (select distinct name from t) n cross join (select distinct date from t) d left join t on t.name = n.name and t.date = d.date;
如果表中完全缺少某些日期,则需要一个日历表或某种cte来生成所有日期。
1条答案
按热度按时间aij0ehis1#
如果表中有所有日期,则可以使用原始表中的数据。使用
cross join
生成行,然后left join
引入价值观:如果表中完全缺少某些日期,则需要一个日历表或某种cte来生成所有日期。