首页 > 解决方案 > 合并Oracle中的行与不同列中的空值

问题描述

我的查询是根据人口统计从两个不同的客户表中提取基本人口。这两个表共享许多列,例如名称、ID、城市、州和邮政编码。表 A 包含表 B 中没有的 2 列(state2 和 state3)。表 B 包含 1 列不在表 B(国家/地区)中。

我使用联合来合并两个基本人口。每个基本人口中都有一些名称重复,但不是全部。有些是每个基本人口所独有的,因为它们存在于一个表中,而不存在于另一个表中。联合不会删除两个表中存在的重复项,因为它们在表 A 唯一列中具有信息,但在表 B 唯一列中具有空值,反之亦然。我需要弄清楚如何将它们组合成一行,所有 3 列都显示适用的数据。请参阅示例输出:

ID   Name   City     State   State2   State3   Zip   Country   Phone   Order Year   Order Status
111  Bob    Anytown  MP                       55555    US     555-5555  2020         Valid
111  Bob    Anytown  MP       MP       MP     55555           555-5555  2020         Valid 

我想返回以下内容:

ID   Name   City     State   State2   State3   Zip   Country   Phone   Order Year   Order Status
111  Bob    Anytown  MP       MP        MP    55555    US     555-5555  2020         Valid

我尝试使用不存在的逻辑,还尝试在非空条件下将联合基础加入自身,但无法获得我正在寻找的结果。谢谢!

标签: sqloraclemergerows

解决方案


If you have only issue with 3 columns then you can use group by and max/min to create one record with non-null data as following:

Select id, name, city, state,
       Max(state2) as state2,
       Max(state3) as state3,
       Zip,
       Max(country) as country,
       Phone,
       "Order Year",
       "Order Status"
  From (your_union_query)
Group by id, name, city, state,
       Zip, Phone, "Order Year", "Order Status"

Cheers!!


推荐阅读