我有一个像这样的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来说还是一个新手。任何帮助将不胜感激!
答案 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;