我在teradata上有一张如下表格。
每个客户在表中最多可以有2行 - 一行填充地址,另一行填写地址为null。因此,一些客户只能拥有一行地址。有些只能有一行没有地址。有些可以有2行,一行有地址,一行没有地址。
我想要一个输出表,每个客户有一行 - 如果有地址,那么我想要那行,如果不是我想要空行。我尝试过使用案例陈述和陈述,但我似乎无法让它们发挥作用。好像我需要像文本的最大功能一样的东西。
表1 :
cust_id address
1 abc
1
2
3 xyz
输出:
cust_id address
1 abc
2
3 xyz
答案 0 :(得分:2)
您可以将group by
子句与max
聚合函数一起使用:
select cust_id, max(address)
from tbl
group by cust_id
答案 1 :(得分:2)
group by
方法是最简单的表达方法。使用正确的索引,union all
可能会有更好的性能:
select *
from tbl
where address is not null
union all
select *
from tbl t2
where address is null and
not exists (select 1 from tbl t2 where t.cust_id = t2.cust_id and t2.address is not null);
注意:这有利于保留给定cust_id
的所有非NULL值。