0

位置表记录有两个地址 ID - mailing 和业务地址 ID,它们引用地址表。

因此,地址表将包含给定地址ID 的最多两条记录。

给定一个位置 ID,我需要一个 sproc 来返回一个结果集中的所有 tbl_Location 字段和所有 tbl_Address 字段:

            LocationID INT,
            ClientID INT,
            LocationName NVARCHAR(50),
            LocationDescription NVARCHAR(50),
            MailingAddressID INT,
            BillingAddressID INT,
            MAddress1 NVARCHAR(255),
            MAddress2 NVARCHAR(255),
            MCity NVARCHAR(50),
            MState NVARCHAR(50),
            MZip NVARCHAR(10),
            MCountry CHAR(3),
            BAddress1 NVARCHAR(255),
            BAddress2 NVARCHAR(255),
            BCity NVARCHAR(50),
            BState NVARCHAR(50),
            BZip NVARCHAR(10),
            BCountry CHAR(3)

我首先创建了一个包含必填字段的临时表,但我对如何实现这一点有点坚持。

我可以为每个必需的地址字段进行子选择,但似乎有点混乱。

我已经有了一个接受地址 ID 的表值函数,并返回该 ID 的所有字段,但不知道如何将它集成到我需要的结果中。

在手边,看起来有 3 个选项来创建此表 - 1:位置,2:邮寄地址,3:帐单地址。

我想做的只是创建一个视图并使用它。

任何帮助都会有所帮助。

谢谢。

4

2 回答 2

4

类似于以下内容的东西会起作用:

select L.*, 
a1.Address1 as MAddress1, a1.Address2 as MAddress2,
a2.Address1 as BAddress1, a2.Address2 as BAddress2
from location L
  inner join Address a1 on (a1.AddressId = L.MailingAddressId)
  inner join Address a2 on (a2.AddressId = L.BillingAddressId)

我没有把所有的领域,但你明白了。

请注意,如果任一地址 id 可能为空,则您可能会使用左连接。

于 2010-03-23T18:35:09.810 回答
0

如果我正确理解了您的问题,您需要以下内容:

SELECT
    L.*,
    MAddress1 = M.Address1,
    MAddress2 = M.Address2,
    MCity = M.City,
    MState = M.State,
    MZip = M.Zip,
    MCountry = M.Country
    BAddress1 = B.Address1,
    BAddress2 = B.Address2,
    BCity = B.City,
    BState = B.State,
    BZip = B.Zip,
    BCountry = B.Country
FROM
    tbl_Location L
    INNER JOIN tbl_Address M
        ON L.MailingAddressID = M.MailingAddressID
    INNER JOIN tbl_Address B
        ON L.BillingAddressID = B.BillingAddressID
WHERE
    L.LocationID = @LocationID
于 2010-03-23T18:36:00.150 回答