Новичок в SQL, как получить контактные данные из контактов и задач, используя левое внешнее соединение? - PullRequest
0 голосов
/ 07 августа 2010

Я написал этот отчет, чтобы показать, сколько времени требуется пользователю, чтобы завершить свою первую задачу. в настоящее время он будет отображать только те контакты, у которых есть задачи. Мне нужно, чтобы отображать контакты с и без задач какие-либо идеи?

SELECT c.MarketSource                                                                                   AS [Market Source],
       Coalesce(u.FirstName + ' ', ' ') + Coalesce(u.LastName, ' ')                                     AS [Producer],
       Coalesce(c.FirstName + ' ', ' ') + Coalesce(c.MiddleName + ' ', ' ') + Coalesce(c.LastName, ' ') AS [Lead Name],
       t.TaskType                                                                                       AS [Task],
       Coalesce (t.workflow_resultchosen_label, t.result, ' ')                                          AS [Task Result],
       Dateadd(HOUR, @utcoffset, c.createdon)                                                           AS [Received On],
       Dateadd(HOUR, @utcoffset, ( MIN (t.completed) ))                                                 AS [Completed],
       (SELECT COUNT(*)
        FROM   Quotes q WITH (NOLOCK)
        WHERE  SaleID IS NULL
               AND c.ContactID = q.ContactID)                                                           AS [Pending Quotes],
       (SELECT COUNT(*)
        FROM   Sales s WITH (NOLOCK)
        WHERE  s.Client_ID = c.ContactID)                                                               AS [Total Sales]
FROM   Tasks t WITH (NOLOCK)
       LEFT JOIN Users U WITH (NOLOCK)
         ON u.UserID = t.UserID
       LEFT JOIN Contacts C WITH (NOLOCK)
         ON c.ContactID = t.TargetID
WHERE  iLeadPartnerID IS NOT NULL
       AND ( c.CreatedOn BETWEEN @startDate AND @endDate )
       AND MarketSource IS NOT NULL
       AND c.WorkgroupId = @workgroupID
       AND Len(c.MarketSource) > 0
       AND t.TaskType <> '[=] Auto Email'
GROUP  BY c.MarketSource,
          u.LastName,
          u.FirstName,
          c.ContactId,
          c.LastName,
          c.FirstName,
          c.MiddleName,
          c.CreatedOn,
          t.TaskType,
          t.Result,
          t.Workflow_ResultChosen_Label
ORDER  BY c.LastName,
          c.MiddleName,
          c.FirstName 

1 Ответ

0 голосов
/ 07 августа 2010

Вам необходимо использовать левое соединение из контактов в задачи (то есть показать все контакты и все соответствующие задачи). Кроме того, необходимо переместить критерии t.TaskType <> '[=] Auto Email' в предложение ON или изменить фильтр предложения Where на:

(t.TaskType <> '[=] Auto Email' Or t.TaskType Is Null).

В противном случае ваше левое соединение с задачами фактически станет внутренним соединением.

SELECT c.MarketSource AS [Market Source]
    , Coalesce(u.FirstName + ' ', ' ') + Coalesce(u.LastName, ' ') AS [Producer]
    , Coalesce(c.FirstName + ' ', ' ') + Coalesce(c.MiddleName + ' ', ' ') + Coalesce(c.LastName, ' ') AS [Lead Name]
    , t.TaskType AS [Task], Coalesce (t.workflow_resultchosen_label, t.result, ' ') AS [Task Result]
    , Dateadd(HOUR, @utcoffset, c.createdon) AS [Received On]
    , Dateadd(HOUR, @utcoffset, ( MIN (t.completed) )) AS [Completed]
    , (SELECT COUNT() FROM Quotes q WITH (NOLOCK) WHERE SaleID IS NULL AND c.ContactID = q.ContactID) AS [Pending Quotes]
    , (SELECT COUNT() FROM Sales s WITH (NOLOCK) WHERE s.Client_ID = c.ContactID) AS [Total Sales] 
From Contacts As C WITH (NOLOCK)
    Left Join Tasks t WITH (NOLOCK) 
        On t.TargetID = C.ContactId
            And t.TaskType <> '[=] Auto Email' 
    LEFT JOIN Users U WITH (NOLOCK) 
        ON u.UserID = t.UserID 
WHERE iLeadPartnerID IS NOT NULL 
    AND ( c.CreatedOn BETWEEN @startDate AND @endDate ) 
    AND MarketSource IS NOT NULL 
    AND c.WorkgroupId = @workgroupID 
    AND Len(c.MarketSource) > 0 
GROUP BY c.MarketSource, u.LastName, u.FirstName, c.ContactId
    , c.LastName, c.FirstName, c.MiddleName, c.CreatedOn, t.TaskType
    , t.Result, t.Workflow_ResultChosen_Label 
ORDER BY c.LastName, c.MiddleName, c.FirstName 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...