WorkAkkaunt

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

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