小编典典

条件DB2 SQL查询

sql

假设我有一个名为“ Company”的表,其中包含CompanyID关键字。还有另一个名为“
CompanyAddress”的相关表,该表具有CompanyID外键,因此可以轻松地建立联接。

该CompanyAddress表可以具有给定公司的多个地址,例如AddressType = 1或AddressType = 2

用于获取字段的联接等是微不足道的,但是我需要一个条件,在该条件下查询地址,如果存在则使用AddressType =
1,如果不存在,则使用AddressType = 2

目前,我正在考虑进行合并并删除重复项,但是必须有一种更好的方法


阅读 192

收藏
2021-04-14

共1个答案

小编典典

实际上,通过使用OLAP函数来执行此操作非常简单(如果您正在使用DB2 for Linux / UNIX /
Windows)。我猜到了companyAddress表中的某些列名,但是“魔术”在rank()函数中:

with preferredAddresses as (
   select 
      companyID, 
      address, 
      addresstype, 
      rank() over (partition by companyID order by addresstype ) as rank 
   from 
      companyAddress
)
select * 
from 
   company C,
   inner join preferredAddresses A
      on c.companyID = A.companyID
where
   A.rank = 1;
2021-04-14