WorkAkkaunt

Индивидуальная статистика V3

Aug 1st, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.10 KB | None | 0 0
  1. DECLARE @DATE_START datetime = '20190729 23:59'
  2. DECLARE @DATE_END   datetime = '20190730 23:59'
  3.  
  4. DECLARE @TIME_START datetime = '19000101 00:00'
  5. DECLARE @TIME_END   datetime = '19000101 23:59'
  6.  
  7. DECLARE @TASKS TABLE (Id uniqueidentifier)
  8.  
  9. INSERT INTO @TASKS
  10. SELECT id FROM oktell.dbo.A_TaskManager_Tasks
  11.  
  12. DECLARE @OPERATORS TABLE (Id uniqueidentifier)
  13.  
  14. INSERT INTO @OPERATORS
  15. SELECT Id
  16. FROM [oktell_settings].[dbo].[A_Users]
  17.  
  18. DECLARE @TYPE_TIME bit = 'False'
  19.  
  20. DECLARE @TYPE_REPORT int = 1
  21.     --select 1, 'к каждой дате'
  22.     --union all
  23.     --select 2, 'к дате начала и конца'
  24. ----------------------------------------------------------------------------------
  25.  
  26. ----ФИЛЬТРУЕМ ВХОДЯЩИЕ ЗВОНКИ---------------------------------------------------------
  27. DECLARE @FilteredEffort TABLE(OperId uniqueidentifier, LenTime int, CallResult int)
  28.  
  29. IF(@TYPE_REPORT = 1)
  30. BEGIN
  31.     INSERT INTO @FilteredEffort
  32.     SELECT IdOperator
  33.         , CAST(LenTime as int)
  34.         , CallResult
  35.     FROM [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
  36.     WHERE DateTimeStart BETWEEN @DATE_START AND @DATE_END
  37.         AND IdTask IN (SELECT * FROM @TASKS)
  38.         AND IdOperator IN (SELECT * FROM @OPERATORS)
  39. END
  40.  
  41. IF(@TYPE_REPORT = 2)
  42. BEGIN
  43.     INSERT INTO @FilteredEffort
  44.     SELECT IdOperator
  45.         , CAST(LenTime as int)
  46.         , CallResult
  47.     FROM [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
  48.     WHERE (CAST(DateTimeStart as date) = CAST(@DATE_START as date) OR CAST(DateTimeStart as date) =  CAST(@DATE_END as date))
  49.         AND IdTask IN (SELECT * FROM @TASKS)
  50.         AND IdOperator IN (SELECT * FROM @OPERATORS)
  51. END
  52.  
  53. ---------ИЗВЛЕКАЕМ УСПЕШНЫЕ ВХОДЯЩИЕ ЗВОНКИ------------------------------------------------------
  54. DECLARE @SuccessIncom TABLE(OperId uniqueidentifier, [Count] int, AvgTime int)
  55.  
  56. INSERT INTO @SuccessIncom
  57. SELECT OperId
  58.     , COUNT(OperId)
  59.     , CAST(AVG(LenTime) as int)
  60. FROM @FilteredEffort
  61. WHERE CallResult = 5
  62. GROUP BY OperId
  63. -----------------------------------------------------------------------------------------
  64.  
  65. ------ИЗВЛЕКАЕМ ПРОПУЩЕННЫЕ ВХОДЯЩИЕ ЗВОНКИ-------------------------------------------------------
  66. DECLARE @FailedIncom TABLE(OperId uniqueidentifier, [Count] int)
  67.  
  68. INSERT INTO @FailedIncom
  69. SELECT OperId
  70.     , COUNT(OperId)
  71. FROM @FilteredEffort
  72. WHERE CallResult != 5
  73. GROUP BY OperId
  74. -----------------------------------------------------------------------------------------
  75.  
  76. ---------ИЗВЛЕКАЕМ ВСЕ ВХОДЯЩИЕ ЗВОНКИ------------------------------------------------------
  77. DECLARE @AllIncom TABLE(OperId uniqueidentifier, [Count] int)
  78.  
  79. INSERT INTO @AllIncom
  80. SELECT OperId
  81.     , COUNT(OperId)
  82. FROM @FilteredEffort
  83. GROUP BY OperId
  84. -----------------------------------------------------------------------------------------
  85. ------ВЫВОДИМ РЕЗУЛЬТАТ------------------------------------------------------------------
  86. DECLARE @Result TABLE([Name] nvarchar(50), Incoming int, Outgoing int, Failed int, AvgTime nvarchar(20), AvgTime1 int)
  87.  
  88. INSERT INTO @Result
  89. SELECT OI.[Name]
  90.     , ISNULL(AI.[Count], 0)
  91.     , ISNULL(SI.[Count], 0)
  92.     , ISNULL(FI.[Count], 0)
  93.     , (SELECT [dbo].[GetTimeFromSecond](ISNULL(SI.AvgTime, 0)))
  94.     , ISNULL(SI.AvgTime, 0)
  95. FROM @AllIncom as AI
  96. LEFT JOIN [oktell_cc_temp].[dbo].[A_Cube_CC_Cat_OperatorInfo] AS OI
  97.     ON AI.OperId = OI.Id
  98. LEFT JOIN @SuccessIncom AS SI
  99.     ON AI.OperId = SI.OperId
  100. LEFT JOIN @FailedIncom AS FI
  101.     ON AI.OperId = FI.OperId
  102.  
  103. IF(@TYPE_TIME = 'True')
  104. BEGIN
  105.     SELECT [Name] as 'Менеджер'
  106.         , Incoming as 'Итого Поступило'
  107.         , Outgoing as 'Итого Принято'
  108.         , Failed as 'Итого Пропущено'
  109.         , AvgTime as 'Среднее время ответа'
  110.     FROM @Result
  111.     ORDER BY AvgTime1 DESC
  112. END
  113.  
  114. IF(@TYPE_TIME = 'False')
  115. BEGIN
  116.     SELECT [Name] as 'Менеджер'
  117.         , Incoming as 'Итого Поступило'
  118.         , Outgoing as 'Итого Принято'
  119.         , Failed as 'Итого Пропущено'
  120.         , AvgTime as 'Среднее время ответа'
  121.     FROM @Result
  122.     ORDER BY AvgTime1
  123. END
Advertisement
Add Comment
Please, Sign In to add comment