Advertisement
WorkAkkaunt

Рабочее время операторов v4

Aug 13th, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 7.59 KB | None | 0 0
  1. DECLARE @DATE_START datetime = '20190813 00:00'
  2. DECLARE @DATE_END datetime = '20190813 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_cc_temp].[dbo].[A_Cube_CC_Cat_OperatorInfo]
  17.     WHERE [Name] LIKE '%kelly_B2D_makovetskii%'
  18.  
  19. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  20. --------ОТФИЛЬТРОВЫВАЕМ И СОЕДИНЯЕМ ТАБЛИЦЫ-----------------------------------------------------------
  21. DECLARE @OperStates TABLE
  22.     (
  23.         IdTask uniqueidentifier
  24.         , IdOperator uniqueidentifier
  25.         , TimeStart datetime
  26.         , [State] int
  27.         , ICode int
  28.         , LenTime int
  29.         , UserState int
  30.     );
  31.  
  32. WITH FilteredTable AS
  33. (
  34.     SELECT IdTask
  35.         , IdOperator
  36.         , DateTimeStart
  37.         , [State]
  38.         , ICode
  39.         , LenTime
  40.     FROM [oktell_cc_temp].[dbo].[A_Cube_CC_OperatorStates] WITH (NOLOCK)
  41.     WHERE DateTimeStart BETWEEN @DATE_START AND @DATE_END
  42.         AND TimeStart BETWEEN @TIME_START AND @TIME_END
  43.         AND IdOperator IN (SELECT * FROM @OPERATORS)
  44. )
  45.  
  46. INSERT INTO @OperStates
  47. SELECT IdTask
  48.     , IdOperator
  49.     , DateTimeStart
  50.     , OS.[State]
  51.     , OS.ICode
  52.     , CAST(LenTime as int)
  53.     , US.[State]
  54. FROM FilteredTable as OS
  55. LEFT JOIN [oktell].[dbo].[A_UserStateHistory] as US
  56.     ON US.UserId = OS.IdOperator AND OS.DateTimeStart = US.TimeChange
  57.  
  58. -------------------------------------------------------------------------------------------------
  59. ---------СЧИТАЕМ ВХОДЯЩИЕ--------------------------------------------------------------
  60. DECLARE @FilteredEffort TABLE(OperId uniqueidentifier, [Count] int)
  61.  
  62. INSERT INTO @FilteredEffort
  63. SELECT IdOperator, COUNT(IdOperator)
  64. FROM [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
  65. WHERE DateTimeStart BETWEEN @DATE_START AND @DATE_END
  66.     AND TimeStart BETWEEN @TIME_START AND @TIME_END
  67.     AND BLineNum <> 'IVR' AND IsOutput = 0
  68.     AND IdTask IN (SELECT * FROM @TASKS)
  69.     AND IdOperator IN (SELECT * FROM @OPERATORS)
  70.     and IsRecorded = 1
  71. GROUP BY IdOperator
  72. ----------------------------------------------------------------------------------------
  73.  
  74. ---------СЧИТАЕМ ИСХОДЯЩИЕ--------------------------------------------------------------
  75. DECLARE @FilteredStat TABLE(OperId uniqueidentifier, [Count] int)
  76.  
  77. INSERT INTO @FilteredStat
  78. SELECT AUserId, COUNT(AUserId)
  79. FROM [oktell].[dbo].[A_Stat_Connections_1x1]
  80. WHERE TimeStart BETWEEN @DATE_START AND @DATE_END
  81.     AND CAST(TimeStart as time) BETWEEN CAST(@TIME_START as time) AND CAST(@TIME_END as time)
  82.     AND ConnectionType = 1
  83.     AND AUserId IN (SELECT * FROM @OPERATORS)
  84. GROUP BY AUserId;
  85. -----------------------------------------------------------------------------------------
  86.  
  87. ------ПОДСЧИТЫВАЕМ ВСЕ ЗНАЧЕНИЯ----------------------------------------------------------
  88. WITH FinalTable AS
  89. (
  90.     SELECT IdOperator
  91.         , SUM(LenTime) as SumTotal
  92.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] IN (1, 2, 3)                                   AND OS.IdOperator = IdOperator AND IdTask IN     (SELECT * FROM @TASKS)), 0) as BeforeTask
  93.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 6                                            AND OS.IdOperator = IdOperator AND IdTask IN     (SELECT * FROM @TASKS)), 0) as Tasks
  94.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] IN (1, 2, 3, 4, 6, 7)                          AND OS.IdOperator = IdOperator AND IdTask NOT IN (SELECT * FROM @TASKS)), 0) as OtherTasks
  95.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 10                                           AND OS.IdOperator = IdOperator), 0) as Ready
  96.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] IN (5, 8)                                      AND OS.IdOperator = IdOperator), 0) as Talk
  97.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE ([State] = 9 AND UserState IS NULL OR UserState = 3)   AND OS.IdOperator = IdOperator), 0) as [Break]
  98.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 9 AND ICode = 1                              AND OS.IdOperator = IdOperator), 0) as Dispatchs
  99.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 9 AND ICode = 2                              AND OS.IdOperator = IdOperator), 0) as Tickets
  100.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 9 AND ICode = 3                              AND OS.IdOperator = IdOperator), 0) as Chat
  101.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 9 AND ICode = 4                              AND OS.IdOperator = IdOperator), 0) as Other
  102.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 9 AND ICode = 6                              AND OS.IdOperator = IdOperator), 0) as Refunds
  103.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 9 AND ICode = 7                              AND OS.IdOperator = IdOperator), 0) as Training
  104.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 9 AND ICode = 8                              AND OS.IdOperator = IdOperator), 0) as Tech
  105.         , ISNULL((SELECT SUM(LenTime) FROM @OperStates WHERE [State] = 7                                            AND OS.IdOperator = IdOperator), 0) as Post
  106.         , ISNULL((SELECT AVG(LenTime) FROM @OperStates WHERE [State] = 7                                            AND OS.IdOperator = IdOperator), 0) as AvgPost
  107.         , ISNULL((SELECT TOP 1 [Count] FROM @FilteredEffort WHERE OperId = OS.IdOperator), 0) as Incoming
  108.         , ISNULL((SELECT TOP 1 [Count] FROM @FilteredStat WHERE OperId = OS.IdOperator), 0) as Outgoing
  109.     FROM @OperStates AS OS
  110.     GROUP BY (IdOperator)
  111. )
  112. ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  113. SELECT OI.Name
  114.     , (SELECT [dbo].[IntToTimeStr](Tasks)) as 'Разговоры по задаче'
  115.     , (SELECT [dbo].[IntToTimeStr](BeforeTask)) as 'Время до ответа'
  116.     , (SELECT [dbo].[IntToTimeStr](Post)) as 'ACW'
  117.     , (SELECT [dbo].[IntToTimeStr](OtherTasks)) as 'Разговоры по др. задачам'
  118.     , (SELECT [dbo].[IntToTimeStr](Talk)) as 'Разговоры не по задаче'
  119.     , (SELECT [dbo].[IntToTimeStr](Ready)) as 'Готов'
  120.     , (SELECT [dbo].[IntToTimeStr]([Break])) as 'Перерыв'
  121.     , (SELECT [dbo].[IntToTimeStr](Dispatchs)) as 'Отправка'
  122.     , (SELECT [dbo].[IntToTimeStr](Tickets)) as 'Тикеты'
  123.     , (SELECT [dbo].[IntToTimeStr](Chat)) as 'Чат'
  124.     , (SELECT [dbo].[IntToTimeStr](Other)) as 'Другое'
  125.     , (SELECT [dbo].[IntToTimeStr](Refunds)) as 'Возврат'
  126.     , (SELECT [dbo].[IntToTimeStr](Training)) as 'Обучение'
  127.     , (SELECT [dbo].[IntToTimeStr](Tech)) as 'Технический вопрос'
  128.     , (SELECT [dbo].[IntToTimeStr](SumTotal)) as 'Всего'
  129.     , Incoming as 'Входящие'
  130.     , Outgoing as 'Исходящие'
  131.     , (SELECT [dbo].[IntToTimeStr](AvgPost)) as 'Среднее время постобработки'
  132. FROM FinalTable as F
  133. LEFT JOIN [oktell_cc_temp].[dbo].[A_Cube_CC_Cat_OperatorInfo] as OI
  134.     ON OI.Id = F.IdOperator
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement