我正在使用 Netezza SQL。
我有以下两个表:
# table_a
id year
1 2010
1 2011
1 2012
1 2013
1 2014
2 2010
2 2011
2 2012
2 2013
2 2014
3 2010
3 2011
3 2012
3 2013
3 2014
# table_b
id year var1
1 2010 A
1 2014 B
2 2012 A
2 2013 C
3 2010 A
3 2011 Z
我的问题:我正在尝试编写 SQL 代码来完成以下任务:
最终答案看起来像这样:
id year var1
1 2010 A
1 2011 not available
1 2012 not available
1 2013 not available
1 2014 B
2 2012 A
2 2013 C
2 2014 not available
3 2010 A
3 2011 Z
3 2012 Z
3 2013 Z
3 2014 Z
这是我迄今为止尝试过的:
第 1 部分: 我知道我需要首先创建缺失的行 - 我认为可以这样做:
select
g.id,
h.year
from
(select id,
min(year) as start
from table_b
group by id)g
join table_a h on
h.id
between g.start and 2014)
但是从这里开始,我不知道如何继续。 有人可以告诉我如何继续解决这个问题吗?
注意:理想情况下,我想使用一组基本 CTE 来解决这个问题,因为 Netezza 中不提供递归函数。
谢谢!
执行左连接:
SELECT
a.id,
a.year,
COALESCE(b.var1, 'not available') AS var1
FROM a LEFT JOIN b ON a.id = b.id AND a.year = b.year
https://www.ibm.com/docs/en/psfa/7.2.1?topic=joins-left-outer-joinleft-join
https://www.ibm.com/docs/en/db2/11.5?topic=functions-coalesce