我的查询是根据人口统计从两个不同的客户表中提取基本人口。两个表共享许多列,例如名称,ID,城市,州和邮政编码。表A包含不在表B中的2列(状态2和状态3)。表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
我尝试使用不存在的逻辑,并且还尝试在不具有空条件的情况下将联合基础加入其自身,但未能获得我想要的结果。谢谢!
您需要合并各个列,然后获取不同的组合,如:
SELECT DISTINCT d1.ID,
COALESCE(d1.NAME, d2.NAME) AS NAME,
COALESCE(d1.City, d2.City) AS City,
COALESCE(d1.State, d2.State) AS State,
COALESCE(d1.State2, d2.State2) AS State2,
COALESCE(d1.State3, d2.State3) AS State3,
COALESCE(d1.Zip, d2.Zip) AS Zip,
COALESCE(d1.Country, d2.Country) AS Country,
COALESCE(d1.Phone, d2.Phone) AS Phone,
COALESCE(d1.Order_Year, d2.Order_Year) AS Order_Year,
COALESCE(d1.Order_Status, d2.Order_Status) AS Order_Status
FROM CUST_DATA d1
LEFT OUTER JOIN CUST_DATA d2
ON d2.ID = d1.ID AND
d2.ROWID <> d1.ROWID
如果只有3 columns
有问题,则可以使用group by
和max/min
来创建一条具有non-null数据的记录,如下所示:
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"
干杯!