0

我有以下 3 个需要从中获取记录地址的表。

1. 地址 AD ---> 它具有所有地址值(addrline1、addrline2、state 等)以及 AddressID 列

2. Address_Employee AE ---> 它有 EmpID,AddressID,AddressTypeID 列 同一 EmpID 可以有多个实例,具有不同的 AddressID 和 AddressTypeID 值为 3 或 1

3. Address_Type AT ---> 有 2 行,有 AddressTypeID 和 AddressType 列。AddressTypeID 值为 1 将是 Home,3 将是 Postal。

需要以首先需要查找邮政地址的方式获取记录,如果不可用则首页。

我正在使用查询:

SELECT (AD.sAddressLine1+' '+AD.sAddressLine2+' '+AD.sSuburb+' '+AD.sPostCode) AS Address
from Address AD
INNER JOIN Address_Employee AE ON AD.AddressID = AE.AddressID 
INNER JOIN Address_Type AT ON AE.AddressTypeID= AT.AddressTypeID 

但是我该如何申请条件:“首先需要寻找邮政地址,如果没有,那么家庭。”

请指教。

谢谢,克里希纳

4

1 回答 1

1

您可以创建一个视图,为每个 EmpID 提供首选地址,并将其用于进一步连接。

Create View V_Emp_With_Preferred_Address as

Select Distinct EmpID
,Case when Exists(Select * from Address_Employee where Address_Employee.EmpID=e.EmpID and AddressTypeID=3) then
    ( -- take preferred postal address if available
     Select ISNULL(sAddressLine1+' ','')+ISNULL(sAddressLine2+' ','')+ISNULL(sSuburb+' ','')+ISNULL(sPostCode,'')
     from Address_Employee 
     join Address on Address.AddressID=Address_Employee.AddressID
     where Address_Employee.EmpID=e.EmpID and AddressTypeID=3
     )
else 
    (
     Select ISNULL(sAddressLine1+' ','')+ISNULL(sAddressLine2+' ','')+ISNULL(sSuburb+' ','')+ISNULL(sPostCode,'')
     from Address_Employee 
     join Address on Address.AddressID=Address_Employee.AddressID
     where Address_Employee.EmpID=e.EmpID and AddressTypeID=1
     )
end as Address
from dbo.Address_Employee e
于 2013-09-18T09:53:47.690 回答