根据另一列

时间:2017-12-06 13:59:41

标签: sql-server

我被要求提供一份报告,显示每个时间段内单个电话代理的性能,在运行时间与部门的平均值相比。 我设法创建主SQL以计算日期的总计,分组到主题代理和组的其余部分。 问题是我需要为代理使用sum,但是对于剩余的组,我需要使用sum(或者至少能够将答案除以13)。

我认为Case就是答案,但对于我的生活,我无法理解。我已经在线查看了多个示例,但它们似乎都处理了各个字段值,而不是计算不同。

这是我到目前为止所拥有的。

declare @Extension varchar(3) ='215'
select sum(inward) + sum(transfers) + sum(lost) as Incoming,sum(outgoing) as Outgoing,sum(transfers) as Transfers,sum(lost) as Lost,GRP,CallDate
from (
    select   
            CASE
            When extension in (@Extension) then 'Selected'
                When extension in('263','250','275','215','223','614','134','292','213','225','271','256','302')  then 'Main Office Housing'

                ELSE 'Unknown'
                END AS GRP,
            Cast(calltime as date) As CallDate,
            case when calltype='i' then 1 else 0 end as inward,
            case when calltype='o' then 1 else 0 end as outgoing,
            case when calltype='ia' then 1 else 0 end as lost,
            case when calltype = 'if' then 1 else 0 end as transfers
            From lrcalldetail  With (NOLOCK)  
            where calltime between DATEADD(d,-7,getdate()) and getdate()
    ) ALLCALLS
    where grp <>'UNKNOWN'
    Group by Allcalls.grp, ALLCALLS.CallDate
    Order by GRP,CallDate

它让我发疯,毫无疑问有人会把它撞出公园。

这是相关表格的ddl。

CREATE TABLE [dbo].[lrcalldetail](
[calldetailid] [int] IDENTITY(1,1) NOT NULL,
[cdrdataid] [int] NULL,
[recordingid] [int] NULL,
[calltime] [datetime] NOT NULL,
[totalduration] [int] NULL,
[ringduration] [int] NULL,
[connectedduration] [int] NULL,
[channel] [varchar](50) NULL,
[extension] [varchar](50) NULL,
[callerid] [varchar](50) NULL,
[calledid] [varchar](50) NULL,
[team] [varchar](50) NULL,
[takenby] [varchar](50) NULL,
[cost] [float] NULL,
[type] [varchar](50) NULL,
[subtype] [varchar](50) NULL,
[transferfromcalldetailid] [int] NULL,
[calltype] [varchar](50) NULL,
[recordedtime] [datetime] NULL,
[linetype] [char](2) NULL,
[transfertocalldetailid] [int] NULL,
[calldirection] [char](1) NULL,
[dialduration] [int] NULL,
[site] [varchar](128) NULL,
[pbxcallid] [varchar](50) NULL,
[status] [varchar](50) NULL,
[trunk] [varchar](50) NULL,
[totaltrunkcalls] [int] NULL,
[recordingidmatchrating] [bigint] NULL,
[processstage] [int] NULL,
[dstchannel] [varchar](50) NULL,
[dsttrunk] [varchar](50) NULL,
[account] [varchar](50) NULL,
[accesscode] [varchar](50) NULL,
[internal] [char](1) NULL,
[destextension] [varchar](50) NULL,
[organisationguid] [uniqueidentifier] NULL,
[groupid] [int] NULL,
[agentid] [varchar](50) NULL,
[endtime] [datetime] NULL,
[userid] [int] NULL,
 CONSTRAINT [PK_lrcalldetail] PRIMARY KEY CLUSTERED 
(
[calldetailid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

这是一些示例数据

calltime                  extension   calltype   calldirection
2017-12-13 09:17:50.000   256         ia        I
2017-12-13 09:20:55.000   271         i         I
2017-12-13 09:21:36.000   271         i         I
2017-12-13 09:42:34.000   223         o         O
2017-12-13 09:42:50.000   215         ia        I
2017-12-13 09:43:50.000   263         ia        I
2017-12-13 09:47:57.000   225         i         I
2017-12-13 09:48:10.000   225         i         I
2017-12-13 09:48:50.000   256         ia        I
2017-12-13 09:55:31.000   215         o         O
2017-12-13 10:02:01.000   223         o         O
2017-12-13 10:02:50.000   250         ia        I
2017-12-13 10:03:50.000   215         ia        I
2017-12-13 10:03:50.000   225         ia        I
2017-12-13 10:05:48.000   215         i         I
2017-12-13 10:05:55.000   215         i         I
2017-12-13 10:06:51.000   250         if        I
2017-12-13 10:24:50.000   134         ia        I
2017-12-13 10:28:40.000   263         if        I
2017-12-13 10:37:57.000   223         o         O
2017-12-13 10:39:19.000   215         o         O
2017-12-13 10:41:57.000   223         o         O
2017-12-13 10:50:25.000   614         o         O
2017-12-13 10:51:36.000   614         o         O
2017-12-13 10:53:39.000   215         o         O
2017-12-13 10:58:50.000   134         ia        I
2017-12-13 10:59:57.000   614         o         O
2017-12-13 11:03:46.000   263         if        I
2017-12-13 11:10:27.000   256         if        I
2017-12-13 11:13:50.000   302         ia        I
2017-12-13 11:14:22.000   225         o         O
2017-12-13 11:16:50.000   256         ia        I
2017-12-13 11:17:18.000   614         ia        I
2017-12-13 11:17:50.000   256         ia        I
2017-12-13 11:18:36.000   614         i         I
2017-12-13 11:18:38.000   614         i         I
2017-12-13 11:23:33.000   614         i         I
2017-12-13 11:23:55.000   614         i         I
2017-12-13 11:24:25.000   614         o         O
2017-12-13 11:33:12.000   225         o         O
2017-12-13 11:40:18.000   271         if        I
2017-12-13 11:42:12.000   215         o         O
2017-12-13 11:43:56.000   614         i         I
2017-12-13 11:44:29.000   614         i         I
2017-12-13 11:50:31.000   250         o         O
2017-12-13 11:55:40.000   223         o         O
2017-12-13 11:56:50.000   256         ia        I
2017-12-13 12:01:50.000   134         ia        I
2017-12-13 12:06:50.000   302         ia        I
2017-12-13 12:36:50.000   250         ia        I
2017-12-13 12:37:50.000   250         ia        I
2017-12-13 13:01:50.000   256         ia        I
2017-12-13 13:01:50.000   256         ia        I
2017-12-13 13:11:50.000   250         ia        I
2017-12-13 13:16:50.000   225         ia        I
2017-12-13 13:28:50.000   302         ia        I
2017-12-13 13:31:50.000   223         ia        I
2017-12-13 13:53:50.000   275         ia        I
2017-12-13 13:57:50.000   292         ia        I
2017-12-13 13:58:50.000   302         ia        I
2017-12-13 14:00:50.000   302         ia        I
2017-12-13 14:13:50.000   250         ia        I
2017-12-13 14:20:48.000   614         o         O
2017-12-13 14:21:50.000   225         ia        I
2017-12-13 14:38:12.000   292         o         O
2017-12-13 14:39:22.000   263         if        I
2017-12-13 14:40:04.000   256         o         O
2017-12-13 14:45:52.000   302         i         I
2017-12-13 14:45:57.000   302         i         I
2017-12-13 14:48:17.000   256         o         O
2017-12-13 14:51:56.000   302         i         I
2017-12-13 14:52:39.000   302         i         I
2017-12-13 15:01:50.000   256         ia        I
2017-12-13 15:01:57.000   302         o         O
2017-12-13 15:07:43.000   223         if        I
2017-12-13 15:12:57.000   302         i         I
2017-12-13 15:12:58.000   302         i         I
2017-12-13 15:15:50.000   263         ia        I
2017-12-13 15:18:40.000   263         i         I
2017-12-13 15:18:57.000   263         i         I
2017-12-13 15:35:58.000   223         o         O
2017-12-13 15:41:56.000   275         i         I
2017-12-13 15:42:05.000   275         i         I
2017-12-13 15:44:07.000   223         o         O
2017-12-13 15:52:08.000   223         o         O
2017-12-13 15:55:42.000   223         o         O
2017-12-13 16:01:50.000   271         ia        I
2017-12-13 16:02:40.000   250         o         O
2017-12-13 16:15:30.000   223         o         O
2017-12-13 16:17:57.000   223         i         I
2017-12-13 16:18:07.000   223         i         I
2017-12-13 16:28:50.000   225         ia        I
2017-12-13 16:36:50.000   271         ia        I
2017-12-13 16:45:51.000   614         ia        I
2017-12-13 16:48:50.000   614         ia        I
2017-12-13 16:49:50.000   271         ia        I
2017-12-13 16:54:59.000   263         o         O
2017-12-13 16:55:09.000   263         o         O
2017-12-13 17:03:02.000   215         o         O
2017-12-13 17:18:28.000   225         o         O
2017-12-13 17:26:31.000   225         o         O
2017-12-14 08:37:27.000   302         o         O
2017-12-14 08:40:26.000   302         o         O
2017-12-14 08:44:45.000   263         o         O
2017-12-14 08:47:43.000   271         o         O
2017-12-14 09:21:50.000   256         ia        I
2017-12-14 09:26:33.000   225         o         O
2017-12-14 09:29:45.000   225         o         O
2017-12-14 09:35:39.000   225         o         O
2017-12-14 09:35:54.000   614         i         I
2017-12-14 09:35:57.000   614         i         I
2017-12-14 09:38:00.000   275         if        I
2017-12-14 09:44:21.000   225         o         O
2017-12-14 09:49:11.000   213         o         O
2017-12-14 09:51:52.000   614         o         O
2017-12-14 09:51:57.000   614         o         O
2017-12-14 09:55:28.000   614         o         O
2017-12-14 10:02:00.000   225         o         O
2017-12-14 10:05:49.000   225         o         O
2017-12-14 10:06:50.000   250         ia        I
2017-12-14 10:06:57.000   292         o         O
2017-12-14 10:07:02.000   292         o         O
2017-12-14 10:20:23.000   263         o         O
2017-12-14 10:26:23.000   614         if        I

1 个答案:

答案 0 :(得分:0)

如果您在内部查询中包含extension,那么您可以在外部查询中COUNT(DISTINCT extension)了解每个grp中有多少个扩展名。然后,您可以按此计数除以总和。

这也将计算单个目标扩展的平均值 - 但由于样本大小为1的平均值也等于总和,因此应该没问题。

(你要么在每个表达式中重复使用COUNT(DISTINCT extension),要么引入更高级别的次级制作以允许你写Incoming/Cnt - 同时注意你很可能会去在整数数学中工作所以你可能希望CASTdecimal或多个1.0以确保在分割期间不会出现整数截断问题。