TSQL - преобразование адресов в разных строках в одну строку для каждого клиента - PullRequest
1 голос
/ 26 августа 2011

Сегодня я столкнулся с этим препятствием.Возможно из-за недостатка сна / кофе, я просто не могу понять, как обойти.

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

Структуры таблиц, конечно, значительно упрощены и включают только соответствующие столбцы.

Таблица адресов:

CustID Address          AddressType
-----------------------------------
1      3 Marsh Road     D
1      5 Bog Street     B
2      4 Peat Close     D
3      1 Swamp Crescent D
3      5 Moor Avenue    B
4      6 Wetland Place  D

Первичный ключ (custID, AddressType).Значения AddressType: D = адрес доставки;B = платежный адрес.У каждого CustID есть адрес доставки, но не у всех есть адрес для выставления счета.

Теперь я хочу добиться того, чтобы преобразовать вышеприведенное в нижнее на основе поля AddressType посредством запроса, чтобы у нас было это (если нет биллинга, используйте адрес доставки):

CustID DelAddress       BillAddress
---------------------------------------
1      3 Marsh Road     5 Bog Street
2      4 Peat Close     4 Peat Close
3      1 Swamp Crescent 5 Moor Avenue
4      6 Wetland Place  6 Wetland Place

1 Ответ

5 голосов
/ 26 августа 2011

LEFT OUTER JOIN поможет вам, когда что-то существует в A и, возможно, в B. Присоединитесь к таблице адресов дважды, один раз для доставки, один раз для необязательного выставления счета.Используйте COALESCE , чтобы заменить нулевое значение чем-то другим

SELECT
    CustID
,   D.Address AS DelAddress
,   COALESCE(B.Address, D.Address) AS BillAddress
FROM
    ADDRESS D
    LEFT OUTER JOIN
        ADDRESS B
        ON B.CustId = D.CustId
        AND B.AddressType = 'B'
WHERE
    D.AddressType = 'D'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...