TSQL - 如何从一个结果集中的多个表中加入1 .. *?

时间:2010-03-23 18:28:02

标签: tsql join pivot-table temp-tables user-defined-functions

位置表记录有两个地址ID - 邮件和业务地址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:帐单地址。

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

任何帮助都会有所帮助。

感谢。

2 个答案:

答案 0 :(得分: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可能为null,则可以改为使用左连接。

答案 1 :(得分: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