SQL有条件地选择非空行

时间:2016-03-17 21:12:59

标签: sql teradata

我在teradata上有一张如下表格。

每个客户在表中最多可以有2行 - 一行填充地址,另一行填写地址为null。因此,一些客户只能拥有一行地址。有些只能有一行没有地址。有些可以有2行,一行有地址,一行没有地址。

我想要一个输出表,每个客户有一行 - 如果有地址,那么我想要那行,如果不是我想要空行。我尝试过使用案例陈述和陈述,但我似乎无法让它们发挥作用。好像我需要像文本的最大功能一样的东西。

表1

cust_id     address
1           abc
1   
2   
3           xyz

输出

cust_id      address
1            abc
2   
3            xyz

2 个答案:

答案 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值。