我有一个包含客户端地址的表。客户端可以有多个地址记录,我需要确定如何返回US,CAN或BOTH的值,具体取决于他们是在美国还是CAN中有地址,或者两个国家/地区都有地址。
我是在正确的轨道上,还是完全错误地想到了这一点?
SELECT A.CLNT_ID, CASE
WHEN (B.CNTRY_NAME = 'CANADA' AND B.CNTRY_NAME = 'UNITED STATES') THEN 'BOTH'
WHEN (B.CNTRY_NAME = 'CANADA') THEN 'CAN'
WHEN (B.CNTRY_NAME = 'UNITED STATES') THEN 'US'
END
FROM CLNT_ADDR A
ADDRESS B
WHERE A.CLNT_ID IN ('1111','2222','3333')
WITH UR;
答案 0 :(得分:0)
您需要使用聚合,因为客户端可以有多个地址。这会使用count
和case
来获得结果:
select c.clnt_id,
case
when count(distinct a.cntry_name) = 2 then 'Both'
when count(case when a.cntry_name = 'United States' then 1 end) > 0 then 'US'
when count(case when a.cntry_name = 'Canada' then 1 end) > 0 then 'CA'
end
from clnt_addr c
left join address a on c.addr_id = a.addr_id
and a.cntry_name in ('United States','Canada')
where c.clnt_id in ('1111','2222','3333')
group by c.clnt_id
另请注意,包括join
。我猜测两个表中的连接字段都称为addr_id
。根据您的预期结果,您可能需要outer join
,也可能不需要{{1}}。