SQL有条件地选择非空行
Posted
技术标签:
【中文标题】SQL有条件地选择非空行【英文标题】:SQL Selecting non-null rows conditionally 【发布时间】:2016-03-17 21:12:59 【问题描述】:我在 teradata 上有一张如下表。
每个客户在表中最多可以有 2 行 - 一行填充了地址,另一行地址为空。所以有些客户只能有一行有地址。有些只能有一行没有地址。有些可以有 2 行,一排有地址,一排没有地址。
我想要一个每个客户一行的输出表 - 如果有地址,那么我想要那行,如果没有,我想要空行。我尝试过使用 case 语句和 where 语句,但我似乎无法让它们工作。好像我需要像文本的 max 函数。
表 1:
cust_id address
1 abc
1
2
3 xyz
输出:
cust_id address
1 abc
2
3 xyz
【问题讨论】:
【参考方案1】:您可以将group by
子句与max
聚合函数一起使用:
select cust_id, max(address)
from tbl
group by cust_id
【讨论】:
谢谢,我刚刚更新了我的帖子说我认为我需要一个文本的最大功能。我没有意识到我可以在文本上使用 max 。会尝试确认。 如果这些是真正的空值,您甚至可以使用min()
。【参考方案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 值的优点/缺点。
【讨论】:
以上是关于SQL有条件地选择非空行的主要内容,如果未能解决你的问题,请参考以下文章