我正在写一个统计公司投诉的查询。查询应该计算来自公司的投诉总数,并将其分解为公司发出投诉的来电者。因此,示例输出将是:
Company Ref Company Name Company Complaints Caller Caller Complaints
11 Argos 10 Steve 8
11 Argos 10 JIM 2因此,正如您所看到的,查询计算了投诉的总数,然后还将其细分为投诉的人。到目前为止,除了总数之外,我所有的东西都是完美的。我的代码是:
SELECT COMPANYREF,
COMPANY,
(SELECT COUNT(COMPANYREF)
FROM XCALLSTABLE) AS CompanyCalls,
CALLER,
COUNT(*)
FROM XCALLSTABLE
JOIN XCUSTOMERTABLE ON (XCALLSTABLE.COMPANYREF = XCUSTOMERTABLE.CUSTREF)
JOIN XTELEPHONETABLE ON (XCUSTOMERTABLE.TELEPHONE = XTELEPHONETABLE.PHONENUMBER)
GROUP BY COMPANYREF,
COMPANY,
CALLER
HAVING COUNT(*) > 0 ;当前代码的一些示例输出是:
Company Ref Company Name Company Complaints Caller Caller Complaints
145 Comfiture Traders 500 Alexis Patel 4这里的问题是公司的总计数只计算每一行,而我试图计算该公司出现在列中的次数。
任何帮助都将不胜感激。
使用sstan的代码得到的结果是
111 Medusa Shipping 4 Lily Morgan 5
111 Medusa Shipping 4 Ruby Walker 6而结果应该是
111 Medusa Shipping 11 Lily Morgan 5
111 Medusa Shipping 11 Ruby Walker 6发布于 2015-08-06 11:01:14
我确信有一种更简洁的方法可以做到这一点,但以下查询应该可以工作:
SELECT companyref,
company,
CompanyCalls,
caller,
COUNT(*)
FROM (SELECT c.companyref,
company,
COUNT(*) OVER (PARTITION BY c.companyref) AS CompanyCalls,
caller
FROM xcallstable c
JOIN xcustomertable ct
ON ct.custref = c.companyref
JOIN xtelephonetable t
ON t.phonenumber = ct.telephone)
GROUP BY companyref, company, CompanyCalls, caller
HAVING COUNT(*) > 0https://stackoverflow.com/questions/31846031
复制相似问题