首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据库表中不存在的数据中向查询中添加新行

从数据库表中不存在的数据中向查询中添加新行
EN

Stack Overflow用户
提问于 2018-06-22 21:58:09
回答 1查看 32关注 0票数 1

我有以下样本表:

代码语言:javascript
复制
+----------+------+-------+
|   DATE   | NAME | HOURS |
+----------+------+-------+
| 2018-5-3 | JOHN |   8   |
+----------+------+-------+
| 2018-5-9 | JOHN |   5   |
+----------+------+-------+

如何生成将新行填充到现有数据(例如,示例查询结果)的查询:

代码语言:javascript
复制
+-----------+------+-------+
|   DATE    | NAME | HOURS |
+-----------+------+-------+
| 2018-5-1  | JOHN |   0   |
+-----------+------+-------+
| 2018-5-2  | JOHN |   0   |
+-----------+------+-------+
| 2018-5-3  | JOHN |   8   |
+-----------+------+-------+
| 2018-5-4  | JOHN |   0   |
+-----------+------+-------+
| 2018-5-5  | JOHN |   0   |
+-----------+------+-------+
| 2018-5-6  | JOHN |   0   |
+-----------+------+-------+
| 2018-5-7  | JOHN |   0   |
+-----------+------+-------+
| 2018-5-8  | JOHN |   0   |
+-----------+------+-------+
| 2018-5-9  | JOHN |   5   |
+-----------+------+-------+
| 2018-5-10 | JOHN |   0   |
+-----------+------+-------+

检查我是否将0添加到HOURS列中,因为JOHN没有在指定的日期出现时数(仅在2018-5-3和2018-5-8中)。我目前正试图得到这个结果。这只是我需要处理的一个大表的开始,所以我需要为每个用户生成这个固定的值。我试着用以前生成的日期来使用左/右连接,但是它没有工作。

你能建议我怎样才能做到这一点吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-22 22:03:30

使用generate_series()left join

代码语言:javascript
复制
select g.dte, t.name, coalesce(t.hours, 0) as hours
from generate_series('2018-05-01'::date, '2018-05-10'::date, interval '1 day') g(dte) left join
     t 
     on g.dte = t.date;

对于多个用户,您需要为所有用户生成所有行,然后生成left join

代码语言:javascript
复制
select g.dte, n.name, coalesce(t.hours, 0) as hours
from generate_series('2018-05-01'::date, '2018-05-10'::date, interval '1 day'
                    ) g(dte) cross join
     (select distinct name from t) n left join
     t 
     on g.dte = t.date and n.name = t.name;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50996070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档