TSQL - Как объединить 1 .. * из нескольких таблиц в одном наборе результатов? - PullRequest
0 голосов
/ 23 марта 2010

Запись таблицы местоположений имеет два идентификатора адреса - почтовый и служебный адрес, которые ссылаются на таблицу адресов.

Таким образом, таблица адресов будет содержать до двух записей для данного addressID.

Учитывая идентификатор местоположения, мне нужно 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)

Я начал с создания временной таблицы с обязательными полями, но немного застрял в том, как этого добиться.

Я мог бы сделать подвыбор для каждого из обязательных полей адреса, но кажется немного грязным.

У меня уже есть табличная функция, которая принимает идентификатор адреса и возвращает все поля для этого идентификатора, но не уверена, как интегрировать ее в требуемый результат.

От руки это выглядит как 3 выбора для создания этой таблицы - 1: Местоположение, 2: Почтовый адрес, 3: Платежный адрес.

Что я хотел бы сделать, так это просто создать представление и использовать его.

Любая помощь будет полезна.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 23 марта 2010

что-то вроде следующего будет работать:

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)

Я не вставил все поля, но вы поняли.

Обратите внимание, что если любой изидентификаторы адресов могут быть нулевыми, вместо этого вы можете использовать левое соединение.

0 голосов
/ 23 марта 2010

Если я правильно понимаю ваш вопрос, вы хотите что-то вроде:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...