2010-08-13 25 views
1

请查看以下查询,看看你能否帮助我。在多列选择的单个列上使用DISTINCT可以获得正确的结果,但是可以通过createon date命令来获得它?

DECLARE @Contacts TABLE (
    workgroupid UNIQUEIDENTIFIER, 
    contactid UNIQUEIDENTIFIER, 
    leadname  NVARCHAR(130), 
    createdon DATETIME, 
    Marketsource NVARCHAR(150)) 

INSERT INTO @Contacts 
      (workgroupid, 
      contactid, 
      leadname, 
      createdon, 
      Marketsource) 
SELECT workgroupid, 
     contactid, 
     Coalesce(FirstName + ' ', ' ') + Coalesce(LastName, ' '), 
     createdon, 
     Marketsource 
FROM Contacts 
WHERE iLeadPartnerID IS NOT NULL 
     AND (CreatedOn BETWEEN @startDate AND @endDate) 
     AND MarketSource IS NOT NULL 
     AND WorkgroupId = @workgroupID 
     AND Len(MarketSource) > 0 

DECLARE @tasks TABLE (
    targetid UNIQUEIDENTIFIER, 
    workflow NVARCHAR(100), 
    result  NVARCHAR(50), 
    tasktype NVARCHAR(30), 
    completedon DATETIME, 
    userid  UNIQUEIDENTIFIER, 
    producer NVARCHAR(50)) 

INSERT INTO @tasks 
      (targetid, 
      workflow, 
      result, 
      tasktype, 
      completedon, 
      userid, 
      producer) 
SELECT t.TargetID, 
     t.Workflow_ResultChosen_Label, 
     t.Result, 
     t.TaskType, 
     t.Completed, 
     t.UserID, 
     Coalesce(u.FirstName + ' ', 'Not') + Coalesce(u.LastName, ' Assigned') 
FROM Tasks t 
     LEFT JOIN Users u 
     ON u.UserID = t.UserID 
WHERE t.CreatedOn BETWEEN @startDate AND @endDate 
     AND t.TargetID IN (SELECT contactid 
          FROM @Contacts) 
     AND t.TaskType <> '[=] Auto Email' 
GROUP BY t.TargetID, 
      t.UserID, 
      t.Workflow_ResultChosen_Label, 
      t.Result, 
      t.TaskType, 
      t.Completed, 
      u.FirstName, 
      u.LastName 

SELECT DISTINCT (c.Marketsource)         AS [Market Source], 
       t.producer           AS [Producer], 
       C.leadname           AS [Lead Name], 
       t.TaskType           AS [Task], 
       Coalesce (t.workflow, t.result, ' ')    AS [Task Result], 
       Dateadd(HOUR, @utcoffset, c.createdon)    AS [Received On], 
       Dateadd(HOUR, @utcoffset, (MIN (t.completedon))) AS [Completed], 
       (SELECT COUNT(*) 
       FROM Quotes q WITH (NOLOCK) 
       WHERE SaleID IS NULL 
         AND q.ContactID = c.contactid)    AS [Pending Quotes], 
       (SELECT COUNT(*) 
       FROM Sales s WITH (NOLOCK) 
       WHERE s.Client_ID = c.contactid)     AS [Total Sales] 
FROM @Contacts c 
     INNER JOIN @tasks t 
     ON t.targetid = c.contactid 
GROUP BY c.Marketsource, 
      c.createdon, 
      c.contactid, 
      c.leadname, 
      t.producer, 
      t.tasktype, 
      t.workflow, 
      t.result, 
      t.completedon 
+0

如果您邮政编码或XML,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“编码”按钮(101 010)以精确地格式化和语法突出显示它! – 2010-08-13 16:41:25

+1

谢谢下次再抱歉。 – 2010-08-13 16:42:36

回答

0

嗯,是 - 肯定 - 只需要加一个ORDER BY c.CreatedOn到您的最后一个查询 - 既然你得到错误,c.CreatedOn列添加到您的字段列表进行选择:

SELECT DISTINCT 
    c.Marketsource AS [Market Source], 
    c.CreatedOn, 
    t.producer AS [Producer], 
    c.leadname AS [Lead Name], 
    t.TaskType AS [Task], 
    COALESCE(t.workflow, t.result, ' ') AS [Task Result], 
    DATEADD(HOUR, @utcoffset, c.createdon) AS [Received On], 
    DATEADD(HOUR, @utcoffset, MIN(t.completedon)) AS [Completed], 
    (SELECT COUNT(*) 
     FROM dbo.Quotes q WITH (NOLOCK) 
     WHERE SaleID IS NULL 
     AND q.ContactID = c.contactid) AS [Pending Quotes], 
    (SELECT COUNT(*) 
     FROM dbo.Sales s WITH (NOLOCK) 
     WHERE s.Client_ID = c.contactid) AS [Total Sales] 
FROM 
    @Contacts c 
INNER JOIN 
    @tasks t ON t.targetid = c.contactid 
GROUP BY 
    c.Marketsource, c.CreatedOn, c.contactid, c.leadname, 
    t.producer, t.tasktype, t.workflow, t.result, t.completedon 
ORDER BY 
    c.CreatedOn 
+0

当我这样做时,出现以下错误: 消息145,级别15,状态1,行70 如果指定SELECT DISTINCT,则ORDER BY项必须出现在选择列表中。 – 2010-08-13 16:44:38

+0

看到这是我面临的难题,如果我从市场来源中删除独特而不是重复的东西。但我需要按日期排序此报告desc – 2010-08-13 16:46:03

+0

@Brian Benham:你可以将c.CreatedOn添加到你的字段列表中?它工作吗? – 2010-08-13 16:46:15

相关问题