【问题标题】:SQL query, needing assistance with desired outputSQL 查询,需要有关所需输出的帮助
【发布时间】: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


【解决方案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

【讨论】:

  • 好的,我明白你的意思了。虽然这确实成功返回记录,但我希望将额外的调用源结果作为附加列引入。例如。列标题将是周、跟踪器、电子邮件计数、队列计数等...
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 2011-02-22
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2016-07-04
相关资源
最近更新 更多