2013-11-26 56 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删除逗号(“”)。手机在选择语句中,你的语法错误问题将被解决,查询将会运行。

相关问题