2013-11-26 57 views
1

我有一個查詢,計數爲來自2013年11月11日至2013年11月24日兩個不同表中的每個客戶端的調用和失敗調用。將第三個表中的SQL查詢合併到從2個不同表中計數的現有查詢中

SELECT d.id_client, 
    d.login, 
    Coalesce(c.total, 0) AS calls, 
    Coalesce(fc.total, 0) AS calls_failed 
FROM api.clients d 
    LEFT OUTER JOIN (SELECT Count(*) AS total, 
          id_client 
        FROM voip.calls c 
        WHERE c.call_start >= '2013-11-11 00:00:00' 
          AND c.call_start < '2013-11-25 00:00:00' 
        GROUP BY id_client) c 
       ON d.id_client = c.id_client 
    LEFT OUTER JOIN (SELECT Count(*) AS total, 
          id_client 
        FROM voip.callsfailed c 
        WHERE c.call_start >= '2013-11-11 00:00:00' 
          AND c.call_start < '2013-11-25 00:00:00' 
          AND c.ie_error_number <> 0 
        GROUP BY id_client) fc 
       ON d.id_client = fc.id_client 
    WHERE d.id_client IN (SELECT e.idclient 
        FROM voip.invoiceclients e 
        WHERE e.clientnr = 'demo') 

我有一個單獨的查詢,對於每個客戶端提供client_balance,MOBILE_NUMBER,名稱。

SELECT cr.id_client, 
    inv.taxid AS company, 
    inv.name, 
    inv.lastname, 
    inv.mobilephone, 
    cr.account_state 
FROM clientsretail cr, 
    invoiceclients inv 
WHERE cr.id_client = inv.idclient 
    AND inv.clientnr = 'demo' 
ORDER BY inv.taxid, 
     inv.name; 

如何合併這些查詢生成以下的輸出: id_client,公司名稱,姓氏,Mobilephone,登錄,電話,失敗,調用,平衡

我試圖採取一些嬰兒步驟,下面的查詢,但沒有成功:

SELECT d.id_client, d.login, 
COALESCE(c.total, 0) AS calls, COALESCE(fc.total, 0) AS calls_failed 
FROM api.clients d 
LEFT OUTER JOIN 
(
    SELECT COUNT(*) AS total, id_client 
    FROM voip.calls c 
    WHERE c.call_start >= '2013-11-11 00:00:00' 
     AND c.call_start < '2013-11-25 00:00:00' 
    GROUP BY id_client 
) c ON d.id_client = c.id_client 
LEFT OUTER JOIN 
(
    SELECT COUNT(*) AS total, id_client 
    FROM voip.callsfailed c 
    WHERE c.call_start >= '2013-11-11 00:00:00' 
     AND c.call_start < '2013-11-25 00:00:00' 
     AND c.IE_error_number <> 0 
    GROUP BY id_client 
) fc ON d.id_client = fc.id_client 
LEFT OUTER JOIN 
(
    SELECT c.idclient, 
     c.taxid, 
     c.name, 
     c.lastname, 
     c.mobilephone 
    FROM voip.invoiceclients c 
) v ON d.id_client=v.idclient 
WHERE d.id_client IN 
(
SELECT e.idclient 
FROM voip.invoiceclients e 
WHERE e.clientnr='demo' 
) 

您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊正確的語法附近

'FROM voip.invoiceclients c 
) v ON d.id_client=v.idclient WHERE d.id_clie' at line 28 
+2

好像你只是將第二個查詢包裝在parens中,並且在SELECT列表中使用'LEFT JOIN(subquery)v ON v.id_client = d.client_id',並從該內聯視圖中引用列(別名爲v)外部查詢...'SELECT d.id_client,v.company,v.name,...'。也許我錯過了什麼? – spencer7593

+0

您的編輯,你都留下了''你的V子查詢c.mobilephone'後'。加上此編輯你不需要在where子句只是把它在V子查詢:'FROM voip.invoiceclients C,其中c.clientnr ='demo'' –

+0

我最終得到了太多的結果,如果我移動的where子句。 – user2924339

回答

1

代碼中使用是絕對正確的,有一個小的語法錯誤C後only.Just刪除逗號(「」)。手機在選擇語句中,你的語法錯誤問題將被解決,查詢將會運行。

相關問題