sql连接条件

时间:2015-02-14 03:26:56

标签: sql oracle select

我有一张表EMPLOYEE,它有像这样的列

EmpId FName LName

我有另一个表ADDRESS,它有像这样的列

EmpId AddressType Address Phone Email

AddressType列有两种可能的类型,住宅和官方,而Emp可以有两种类型的地址。我需要一个查询,它将使用EmpId连接这两个表。
它还需要获取一个手机不为空的地址。
如果两个地址都有电话,那么取任何一个,如果没有电话,仍然取任何一个。
请帮助。

1 个答案:

答案 0 :(得分:3)

根据您的Address规则,首先要确定哪个Employee最适合Phone。找到首选地址后,PhonePreference = 1表示,JOIN可以Address Employee

WITH AddressCTE AS (
    SELECT *
    , ROW_NUMBER() OVER (
        PARTITION BY EmpId 
        ORDER BY CASE WHEN Phone IS NOT NULL THEN 1 ELSE 2 END, Phone
    ) PhonePreference
    FROM Address
)

SELECT *
FROM Employee E
JOIN AddressCTE A ON E.EmpId = A.EmpId AND A.PhonePreference = 1