【发布时间】:2017-06-23 15:38:24
【问题描述】:
请多多包涵,因为我刚刚开始深入研究 SQL 报告,这与仅转储数据相比是一个巨大的飞跃。
这里是表模式的简要说明。 表名:通话记录 字段:callid、tracker、recvddate、callsource
我已经成功使用了这个简单的分组查询
Select
right('00' + rtrim(Datepart(ww, recvddate)),2) week,
Tracker,
count(callsource) as [Email Tickets]
from
calllog
where datepart(year,recvddate) >= '2017' and callsource = 'email'
group by right('00' + rtrim(Datepart(ww, recvddate)),2),Tracker
order by 2,1
这给了我:
我正在尝试生成一个报告,其中我将每个调用源类型的记录数量计算为结果查询中它们自己的列。
这是我尝试过的:
Select
right('00' + rtrim(Datepart(ww, c1.recvddate)),2) week,
c1.Tracker,
count(c1.callsource) as [Email Tickets],
c2.[Queue Tickets]
from
calllog c1
inner join
(
Select
right('00' + rtrim(Datepart(ww, recvddate)),2) week,
Tracker,
count(callsource) as [Queue Tickets]
from
calllog
where datepart(year,recvddate) >= '2017' and callsource = 'phone'
group by right('00' + rtrim(Datepart(ww, recvddate)),2),Tracker
) c2
on c1.callid = c2.callid
where datepart(year,recvddate) >= '2017' and callsource = 'email'
group by right('00' + rtrim(Datepart(ww, recvddate)),2),Tracker
order by 2,1
但我收到以下错误。我尝试更改引用列的方式,但我尝试过的没有任何效果。
感谢任何建议。
更新:
在@Simon 的帮助下,我能够提出我正在寻找的这个查询。
SELECT A.[week] as [Week],
A.tracker as Tracker,
B.Tickets as [Queue Tickets],
C.Tickets as [Email Tickets],
A.Tickets as [Total Tickets]
FROM (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week],
Tracker,
COUNT(callid) as Tickets
FROM calllog
WHERE DATEPART(year,recvddate) >= '2017' and tracker = 'djtaylor'
GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as A
INNER JOIN (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week],
Tracker,
COUNT(callid) as Tickets
FROM calllog
WHERE DATEPART(year,recvddate) >= '2017' and callsource = 'queue'
GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as B ON A.[week] = B.[week]
AND A.Tracker = B.Tracker
INNER JOIN (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week],
Tracker,
COUNT(callid) as Tickets
FROM calllog
WHERE DATEPART(year,recvddate) >= '2017' and callsource = 'email'
GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as C ON A.[week] = C.[week]
AND A.Tracker = C.Tracker
ORDER BY 2,1
【问题讨论】:
-
除非我理解错了,你只需要在 select 和 group by 中添加 callsource 即可。然后将为您提供每人/周/呼叫源的计数
-
您需要为group by中的列tracker指定表别名,它必须是c1.tracker或者c2.tracker
-
你不应该把 callsource 添加到 select 和 group by 吗?这似乎是你想要的
-
你还需要在你的inner join的select中添加column callid
-
@Simon 我之前确实尝试过,但收到了一个错误。你能举例说明你的意思吗?
标签: sql sql-server reporting