填充缺少列值的postgres表行

时间:2018-06-08 19:09:02

标签: sql database postgresql

我有一个像这样的PostgreSQL表:

表1:

MARKET        character varying 10
COST1         Number

MARKET       DATE           VALUE
A            01/01/2018      10   
A            01/02/2018      45
A            01/04/2018      12 
B            01/01/2018      12
B            01/05/2018      12
B            01/04/2018      12

我还有另一张表:

表2:

DATE
01/01/2018 
01/02/2018 
01/03/2018 
01/04/2018 
01/05/2018

我正在尝试加入这两个表格,以便每个" MARKET"来自table1应该具有table2中的所有日期范围。如果" DATE" table1中没有相应的" VALUE"列应该为零。

OUTPUT应为:

    MARKET       DATE           VALUE
    A            01/01/2018      10   
    A            01/02/2018      45
    A            01/03/2018      0
    A            01/04/2018      12 
    A            01/05/2018      0
    B            01/01/2018      12
    B            01/02/2018      0
    B            01/03/2018      0
    B            01/04/2018      12
    B            01/05/2018      12

对于postgres来说还是一个新手。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

对于此类问题,请使用cross join生成行。使用另一种机制(left join)来引入值。

select m.market, t2.date, coalesce(t1.value, 0) as value
from (select distinct market from t1) m cross join
     t2 left join
     t1
     on t1.market = m.market and t1.date = t2.date;