Advertisement
WorkAkkaunt

СИС. Звонков по операторам

Jul 11th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.75 KB | None | 0 0
  1. DECLARE @DATE_START  DATETIME = '07-10-2018 00:00:00.000'
  2. DECLARE @DATE_FINISH DATETIME = '08-10-2018 00:00:00.000'
  3. DECLARE @TIME_START  DATETIME = '01-01-1900 01:00:00.001'
  4. DECLARE @TIME_FINISH DATETIME = '01-01-1900 23:00:00.001'
  5.  
  6. DECLARE @OPERATORS TABLE(Id uniqueidentifier)
  7. INSERT @OPERATORS VALUES('230FCDC7-5DCD-4126-9374-E1EEB4F1F165')
  8. INSERT @OPERATORS VALUES('95B1BDD5-AF34-40C4-9368-CB80E99A2818')
  9.  
  10. DECLARE @HoursCount int = DATEDIFF(HOUR, @TIME_START, @TIME_FINISH)
  11.  
  12. DECLARE @FilteredConnections0 TABLE(TimeStart datetime, TimeStop datetime, OperId uniqueidentifier, IdChain nvarchar(50), [Name] nvarchar(50), ConnectionType int)
  13. DECLARE @FilteredConnections TABLE(TimeStart datetime, TimeStop datetime, OperId uniqueidentifier, IdChain nvarchar(50), [Name] nvarchar(50))
  14.  
  15. INSERT INTO @FilteredConnections0
  16. SELECT
  17.     TimeStart
  18.     ,TimeStop
  19.     ,BUserID
  20.     ,IdChain
  21.     ,Bstr
  22.     ,ConnectionType
  23. FROM [oktell].[dbo].[A_Stat_Connections_1x1] as ascs WITH (NOLOCK)
  24. RIGHT JOIN @OPERATORS as o
  25. ON o.Id = ascs.BUserId
  26.  
  27.  
  28. --ФИЛЬТРУЕМ ТАБЛИЦУ И СОХРАНЯЕМ В ПЕРЕМЕННОЙ
  29. INSERT INTO @FilteredConnections
  30. SELECT
  31.     TimeStart
  32.     ,TimeStop
  33.     ,OperId
  34.     ,IdChain
  35.     ,[Name]
  36. FROM @FilteredConnections0
  37. WHERE CAST(TimeStart AS date) BETWEEN CAST(@DATE_START AS date) AND CAST(@DATE_FINISH AS date)
  38.     AND CAST(TimeStart AS time) BETWEEN CAST(@TIME_START AS time) AND CAST(@TIME_FINISH AS time)
  39.     AND (ConnectionType = 5 OR ConnectionType = 3 OR ConnectionType = 8)
  40.  
  41. DELETE @FilteredConnections0
  42.  
  43. --select * from @FilteredConnections
  44. -----------------------------------------------------------
  45.  
  46. --ЗАДАЕМ ТАБЛИЦУ СВЯЗЕЙ ID - NAME У ОПЕРАТОРОВ
  47. DECLARE @Id_Names TABLE(Id uniqueidentifier, [Name] nvarchar(50))
  48.  
  49. INSERT INTO @Id_Names
  50. SELECT OperId, [Name]
  51. FROM @FilteredConnections
  52. GROUP BY OperId, [Name]
  53.  
  54. --select * from @Id_Names
  55. --------------------------------------------------------
  56.  
  57. --СЧИТАЕМ ОБРАБОТАННЫЕ ЗВОНКИ И ВРЕМЯ РАЗГОВОРА
  58. DECLARE @LenTalking TABLE(LenTalking int, OperId uniqueidentifier)
  59. DECLARE @LenTalking2 TABLE(LenTalking int, OperId uniqueidentifier, [Count] int)
  60.  
  61. INSERT INTO @LenTalking
  62. SELECT DATEDIFF(SECOND,TimeStart, TimeStop), OperId
  63. FROM @FilteredConnections
  64.  
  65. INSERT INTO @LenTalking2
  66. SELECT SUM(LenTalking), OperId, COUNT(OperId)
  67. FROM @LenTalking
  68. GROUP BY OperId
  69.  
  70. DELETE @LenTalking
  71. --select * from @LenTalking2
  72. ----------------------------------------------------------
  73.  
  74. --СЧИТАЕМ ПРОПУЩЕННЫЕ ЗВОНКИ
  75. DECLARE @Missed TABLE(OperId uniqueidentifier)
  76. DECLARE @Missed2 TABLE([Count] int, OperId uniqueidentifier)
  77.  
  78. INSERT INTO @Missed
  79. SELECT fc.OperId
  80. FROM @FilteredConnections as fc
  81. JOIN [oktell].[dbo].[A_Stat_MissedCalls] AS sm
  82. ON fc.IdChain = sm.IdChain
  83.  
  84. INSERT INTO @Missed2
  85. SELECT COUNT(OperId), OperId
  86. FROM @Missed
  87. GROUP BY OperId
  88.  
  89. DELETE @Missed
  90. --select * from @Missed2
  91. --------------------------------------------------------------
  92.  
  93. --СЧИТАЕМ ПОТЕРЯННЫЕ ЗВОНКИ
  94. DECLARE @Failed TABLE(OperId uniqueidentifier)
  95. DECLARE @Failed2 TABLE([Count] int, OperId uniqueidentifier)
  96.  
  97. INSERT INTO @Failed
  98. SELECT fc.OperId
  99. FROM @FilteredConnections as fc
  100. JOIN [oktell].[dbo].[A_Stat_FailedCalls] AS sm
  101. ON fc.IdChain = sm.IdChain
  102.  
  103. DELETE @FilteredConnections
  104.  
  105. INSERT INTO @Failed2
  106. SELECT COUNT(OperId), OperId
  107. FROM @Failed
  108. GROUP BY OperId
  109.  
  110. DELETE @Failed
  111. --select * from @Failed2
  112. --------------------------------------------------------------
  113.  
  114. --СЧИТАЕМ ВСЕ ЗВОНКИ
  115. DECLARE @Final TABLE(OperId uniqueidentifier, [Count] int)
  116. DECLARE @Final2 TABLE(OperId uniqueidentifier, [Count] int)
  117.  
  118. INSERT INTO @Final
  119. SELECT OperId, [Count]
  120. FROM @LenTalking2
  121. UNION
  122. SELECT OperId, [Count]
  123. FROM @Failed2
  124. UNION
  125. SELECT OperId, [Count]
  126. FROM @Missed2
  127.  
  128. INSERT INTO @Final2
  129. SELECT OperId, SUM(Count)
  130. FROM @Final
  131. GROUP BY OperId
  132.  
  133. DELETE @Final
  134. DELETE @Failed2
  135. --select * from @Final2
  136. ---------------------------------------------------------------
  137.  
  138. DECLARE @FinalTable0 TABLE([Name] nvarchar(50), [All] int, Checked int, Missed int, TimeTalking int, MiddleCount float)
  139. DECLARE @FinalTable TABLE([Name] nvarchar(50), [All] int, Checked int, Missed int, TimeTalking int, MiddleCount float)
  140.  
  141. INSERT INTO @FinalTable0
  142. SELECT
  143.     ins.[Name]
  144.     ,fin.[Count]
  145.     ,lt.[Count]
  146.     ,m.[Count]
  147.     ,lt.LenTalking
  148.     ,lt.[Count]
  149. FROM @LenTalking2 as lt
  150. LEFT JOIN @Missed2 as m
  151.     ON m.OperId = lt.OperId
  152. LEFT JOIN @Final2 as fin
  153.     ON fin.OperId = lt.OperId
  154. LEFT JOIN @Id_Names as ins
  155.     ON ins.Id = lt.OperId
  156.  
  157.  --select * from @FinalTable
  158.  DELETE @Final2
  159.  DELETE @LenTalking2
  160.  DELETE @Missed2
  161.  DELETE @Id_Names
  162.  
  163.  INSERT INTO @FinalTable
  164.  SELECT [Name]
  165.     ,SUM([All])
  166.     ,SUM(Checked)
  167.     ,SUM(Missed)
  168.     ,SUM(TimeTalking) / SUM([All])
  169.     ,ROUND(SUM(Checked) / CAST(@HoursCount as float), 2)
  170.  FROM @FinalTable0
  171.  GROUP BY [Name]
  172.  
  173.  DELETE @FinalTable0
  174.  
  175.  SELECT [Name] as 'Оператор'
  176.     , ISNULL([All], 0) as 'Итого'
  177.     , ISNULL(Checked, 0) as 'Обработано'
  178.     , CONCAT(IIF([All] != 0 AND [ALL] IS NOT NULL, ROUND((ISNULL(Checked, 0) / CAST([All] as float)), 4) * 100, 0), '%')    as 'Обработано %'
  179.     , ISNULL(Missed, 0) as 'Пропущено'
  180.     , CONCAT(IIF([All] != 0 AND [ALL] IS NOT NULL, ROUND((ISNULL(Missed, 0) / CAST([All] as float)), 4) * 100, 0), '%') as 'Пропущено %'
  181.     , CONCAT(TimeTalking / 3600, '.', TimeTalking / 60 - (TimeTalking / 3600) * 60, '.', TimeTalking - (TimeTalking / 60) * 60) as 'Среднее время разговора'
  182.     , MiddleCount as 'Среднее количество принятых звонков за час'
  183.  FROM @FinalTable
  184.  ORDER BY [Name]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement