SQL 查询,需要有关所需输出的帮助
SQL query, needing assistance with desired output
请耐心等待,因为我才刚刚开始深入研究 SQL 报告,这与仅转储数据相比是一个巨大的飞跃。
这里是 table 模式的简要说明。
Table 名称:通话记录
Fields:callid、跟踪器、recvddate、调用源
我已经成功使用这个简单的分组查询
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
right('00' + rtrim(Datepart(ww, recvddate)),2) [week],
Tracker,
callsource,
count(callid) as [Email Tickets]
from
calllog
where datepart(year,recvddate) >= '2017' and callsource = 'email'
group by right('00' + rtrim(Datepart(ww, recvddate)),2), Tracker, callsource
order by [week], Tracker
好的。我想这就是你想要的:
SELECT A.[week] as [Week],
A.tracker as Tracker,
A.callsource,
A.Tickets as CallSourceTickets,
B.Tickets CallCenterTickets
FROM (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week],
Tracker,
callsource,
COUNT(callid) as Tickets
FROM calllog
WHERE DATEPART(year,recvddate) >= '2017'
GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker, callsource) 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'
GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as B ON A.[week] = B.[week]
AND A.Tracker B.Tracker
ORDER BY [Week], Tracker
请耐心等待,因为我才刚刚开始深入研究 SQL 报告,这与仅转储数据相比是一个巨大的飞跃。
这里是 table 模式的简要说明。 Table 名称:通话记录 Fields:callid、跟踪器、recvddate、调用源
我已经成功使用这个简单的分组查询
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
right('00' + rtrim(Datepart(ww, recvddate)),2) [week],
Tracker,
callsource,
count(callid) as [Email Tickets]
from
calllog
where datepart(year,recvddate) >= '2017' and callsource = 'email'
group by right('00' + rtrim(Datepart(ww, recvddate)),2), Tracker, callsource
order by [week], Tracker
好的。我想这就是你想要的:
SELECT A.[week] as [Week],
A.tracker as Tracker,
A.callsource,
A.Tickets as CallSourceTickets,
B.Tickets CallCenterTickets
FROM (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week],
Tracker,
callsource,
COUNT(callid) as Tickets
FROM calllog
WHERE DATEPART(year,recvddate) >= '2017'
GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker, callsource) 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'
GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as B ON A.[week] = B.[week]
AND A.Tracker B.Tracker
ORDER BY [Week], Tracker