2016-01-14 1 views
0

Это должно быть довольно просто, но я пень. В основном найдите все учетные записи, у которых нет активных контактов. SO все учетные записи, контакты которых неактивны, или учетные записи, у которых нет контактов.CRM Как найти аккаунт без активных контактов

Я попробовал два пути, один запрос с левой присоединиться и один с запросом с 'Не существует', но не держит возвращающегося ничего:

Запрос 1:

SELECT a.name, a.statecode AS AccountStatus, c.StateCode AS ContactStatus, c.FullName 
FROM dbo.Account a 
LEFT JOIN dbo.Contact c 
ON a.AccountId = c.ParentCustomerId 
AND c.statecode = 0 --active contacts 
WHERE c.ContactId IS NULL 

запрос 2:

SELECT * 
    FROM dbo.Account a 
WHERE accountid IN (Select accountid FROM Account) 
    AND NOT EXISTS 
(Select c.ParentCustomerId FROM dbo.Contact c 
WHERE c.StateCode = 0 
AND c.ParentCustomerId IS NOT NULL) 
+0

может быть у вас есть 0 записей, как, что: P –

ответ

2

Ваше требование переводится:

  • Все счета
  • Для которых нет контакта существует, активный

перевести бы

SELECT 
    * 
FROM 
    dbo.Account a -- all accounts 
WHERE 
    NOT EXISTS(-- for which no contact exists 
    SELECT 
     1 
    FROM 
     dbo.Contact c 
    WHERE 
     c.ParentCustomerId=a.AccountId AND 
     c.StateCode<>0 -- that is active 
); 
+0

Спасибо, да, это то же количество строк, которые были возвращены, когда я использую левое соединение, но большое спасибо за подтверждение. – ichachan

0

Вы можете попробовать воспользоваться следующими вопросами:

SELECT ac.accountid,ac.name 
FROM account ac 
LEFT JOIN contact ca 
ON ac.accountid=ca.parentcustomerid 
GROUP BY ac.accountid,ac.name 
HAVING COUNT(DISTINCT ca.contactid)=0 
OR SUM(CASE WHEN ca.statecode=0 THEN 1 ELSE 0 END)>0