2014-09-26 3 views
1

Использования Goldmine 2014 на Windows 7 с сервером SQL 2008рSQL для основного адреса электронной почты только

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

Когда я запускаю следующий запрос, я получаю повторяющиеся строки из одной записи контакта. Я бы хотел, чтобы только первичное сообщение было возвращено. Я думаю, что это дополнение AND cs.zip LIKE '_1%' может работать, но не удалось правильно интегрировать. get Идентификатор с несколькими частями «cs.zip» не может быть связан. Пробовал DISTINCT тоже но не удача.

select c1.dear 
     ,c1.lastname 
     ,c1.mergecodes 
     ,c1.accountno 
     ,EM.email 
from contact1 c1 
left join (select cs.accountno, cs.contsupref +isnull(cs.address1,'') Email 
      from contsupp cs 
      where cs.rectype='P' 
      and cs.contact = 'E-mail Address') as EM 
on EM.accountno = c1.accountno 
where (C1.Accountno > 'B40915000' 
     AND (C1.Mergecodes = '' OR C1.Mergecodes IS NULL) 
     AND (C1.Lastname <> '' OR C1.Lastname IS NOT NULL) 
     AND (C1.Dear <> '' OR C1.Dear IS NOT NULL)) 
     AND C1.ACCOUNTNO IN (SELECT DISTINCT ACCOUNTNO 
          FROM CONTSUPP 
          WHERE CONTSUPP.RECTYPE = 'P' 
          AND CONTSUPP.CONTACT = 'E-mail Address') 
ORDER BY C1.accountno 
+0

Опубликовать заголовки, возвращенные 'SELECT * FROM contsupp WHERE 1 = 0'. –

+1

Если вы хотите * отличные * электронные письма, выберите только поле электронной почты – ne1410s

ответ

1

Вы можете использовать функцию ROW_NUMBER(), чтобы получать различные электронные письма.

также использовать оператор Exists вместо того, чтобы использовать в операторе,

Даже если вы используете в операторе вам не нужно использовать Distinct внутри вас подзапроса для оператора IN.

select c1.dear 
     ,c1.lastname 
     ,c1.mergecodes 
     ,c1.accountno 
     ,EM.email 
from contact1 c1 
left join (select cs.accountno, cs.contsupref + isnull(cs.address1,'') Email 
        ,ROW_NUMBER() OVER (PARTITION BY cs.accountno ORDER BY cs.accountno) rn 
      from contsupp cs 
      where cs.rectype = 'P' 
      and cs.contact = 'E-mail Address') as EM 
on EM.accountno = c1.accountno AND EM.rn = 1 
where C1.Accountno > 'B40915000' 
    AND (C1.Mergecodes = '' OR C1.Mergecodes IS NULL) 
    AND (C1.Lastname <> '' OR C1.Lastname IS NOT NULL) 
    AND (C1.Dear <> ''  OR C1.Dear IS NOT NULL) 
    AND EXISTS (SELECT 1 
       FROM CONTSUPP 
       WHERE C1.ACCOUNTNO = CONTSUPP.ACCOUNTNO 
       AND CONTSUPP.RECTYPE = 'P' 
       AND CONTSUPP.CONTACT = 'E-mail Address') 
ORDER BY C1.accountno 
+0

Большое вам спасибо. Row_Nunber() отлично работает и что-то, что я могу использовать снова и снова. –

+0

@FredRoven Классно вы можете принять ответ тогда :) –

Смежные вопросы