2014-03-19 22 views
1

我有兩個查詢,我與UNION ALL一起爲移動潛在客戶做了一個計數,另一個查找了網絡潛在客戶。但不完全確定如何將這兩個結果合併爲一個。這裏是我的查詢:在一起加入查詢

SELECT CAST(submitdate AS DATE) as submitdate, COUNT(DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles`) AS webcount FROM leads WHERE email <> '' and mobile = '0' GROUP BY CAST(submitdate AS DATE) 

    UNION ALL 

    SELECT CAST(submitdate AS DATE) as submitdate, COUNT(DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles`) AS mobilecount FROM leads WHERE email <> '' and mobile = '1' GROUP BY CAST(submitdate AS DATE) 

但我的結果是兩列說submitdate,webcount和日期將被複制,並以計數旁邊是這樣的:

submitdate | webcount 
    2014-03-19 | 30 
    2014-03-19 | 15 
    2014-03-18 | 59 
    2014-03-18 | 37 

當我試圖讓它看起來像這樣:

submitdate | webcount | mobilecount 
    2014-03-19 | 30  | 15 
    2014-03-18 | 59  | 37 

我在做什麼錯?

回答

1

這是一個數據透視方法。使用你的聯合,但作爲「PreQuery」。我添加了一個額外的列,以便將角色的來源識別爲網頁或移動版。從那以後,我在外層使用它,並按日期進行分組,但只計算任意數量的總和,但僅基於Web或移動標誌值。

select 
     PQ.submitdate, 
     sum(case when PQ.leadOrigin = 'W' then PQ.DateCnt else 0 end) as WebCount, 
     sum(case when PQ.leadOrigin = 'M' then PQ.DateCnt else 0 end) as MobileCount 
    from 
     (SELECT 
       CAST(submitdate AS DATE) as submitdate, 
       MAX('W') as leadOrigin, 
       COUNT(DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles`) AS DateCnt 
      FROM 
       leads 
      WHERE 
        email <> '' 
       and mobile = '0' 
      GROUP BY 
       CAST(submitdate AS DATE) 
     UNION ALL 
     SELECT 
       CAST(submitdate AS DATE) as submitdate, 
       MAX('M') as leadOrigin, 
       COUNT(DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles`) AS DateCnt 
      FROM 
       leads 
      WHERE email <> '' 
      and mobile = '1' 
      GROUP BY CAST(submitdate AS DATE)) PQ 
group by 
    PQ.submitdate 
+0

我收到這個錯誤,當我嘗試:#1064 - 你的SQL語法錯誤;在第3行 – NickC217

+0

@NickCurran處檢查與您的MySQL服務器版本對應的正確語法對應的手冊,作爲WebCount,sum(PQ.leadOrigin ='M'然後PQ.DateCnt else 0)'的情況下,錯過了在SUM() – DRapp

+0

Awesome中,case/when子句的「結束」。我會更多地閱讀這些內容,並注意你是如何做到的,以備將來參考。再次感謝! – NickC217

0

我能夠做到這一點查詢:

SELECT a.submitdate, b.webcount, c.mobilecount 
     FROM (
      SELECT DISTINCT CAST(submitdate AS DATE) AS submitdate FROM leads) AS a 
      INNER JOIN 
      (SELECT CAST(submitdate AS DATE) AS submitdate, COUNT(DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles`) AS webcount FROM leads WHERE email <> '' AND mobile = '0' GROUP BY CAST(submitdate AS DATE)) AS b ON a.submitdate = b.submitdate 
      INNER JOIN 
      (SELECT CAST(submitdate AS DATE) AS submitdate, COUNT(DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles`) AS mobilecount FROM leads WHERE email <> '' AND mobile = '1' GROUP BY CAST(submitdate AS DATE)) AS c ON b.submitdate = c.submitdate 
    ORDER BY a.submitdate DESC 

但它只是讓我從2014年3月16日的日期,這是當手機具有比0更高的計數是否有東西添加到這將包括所有日期和默認爲0,如果沒有?