我有一张表EMPLOYEE,它有像这样的列
EmpId FName LName
我有另一个表ADDRESS,它有像这样的列
EmpId AddressType Address Phone Email
AddressType列有两种可能的类型,住宅和官方,而Emp可以有两种类型的地址。我需要一个查询,它将使用EmpId连接这两个表。
它还需要获取一个手机不为空的地址。
如果两个地址都有电话,那么取任何一个,如果没有电话,仍然取任何一个。
请帮助。
答案 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