Условное присоединение - PullRequest
0 голосов
/ 03 июня 2011

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

Теперьинтересным моментом является то, что у меня есть таблица с именами аккаунтов, к которой мне нужно присоединитьсяучитывая, что не все возможности имеют кавычки и наоборот, мне нужен хороший способ присоединиться к таблице, чтобы получить учетную запись, несмотря ни на что (и, теоретически, если есть возможность И цитата, они ДОЛЖНЫ иметь ту же учетную запись).для согласованности, если существуют оба, я хочу использовать данные из цитаты.

Первое, что я попробовал, было следующее:

left outer join dbo.Accounts a
on q.AccountID=a.AccountID
or o.AccountID=a.AccountID

Теперь проблема, с которой я столкнулся, заключается в том, что если у меня естьи цитата И возможность, кажется, что она вернет несколько строк, и это не то, что я хочу.

Вторая попытка, которую я придумал, это:

left outer join dbo.Accounts a
on coalesce(q.AccountID,o.AccountID)=a.AccountID

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

Ответы [ 2 ]

2 голосов
/ 04 июня 2011

Мне кажется, что если у вас всегда есть номер счета, вы работаете в обратном направлении. Вы должны начать с таблицы Acoount и оставить присоединение к остальным.

SELECT a.accountid, OQ.somefield, OQ.someotherfield
FROM   
    (Select coalesce (o.AccountID, q.AccountID) as AccountID,
            q.somefield, o.someotherfield
    FROM Opportunity o 
    FULL JOIN Quote q 
        ON q.opportunityId = a.opportunityId) OQ
LEFT JOIN Accounts A
    ON OQ.AccountID = A.AccountId

Теперь предоставлено это даст вам несколько строк, если у вас есть несколько возможностей или цитаты для одной учетной записи. И вам могут понадобиться некоторые другие факторы в левом соединении, чтобы связать возможности с цитатами. Я не знаю ваших данных, чтобы быть уверенным.

Хорошо, что вы заменяете мерзость, являющуюся вложенным представлением.

0 голосов
/ 03 июня 2011

Используйте ключевое слово DISTINCT в своем запросе.Возвращает только уникальные записи.Таким образом, ваши аккаунты должны появляться только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...