Advertisement
WorkAkkaunt

КЦ ФЛ по операторам

Aug 8th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.87 KB | None | 0 0
  1. DECLARE @DT date = GETDATE()
  2. DECLARE @TASKS  TABLE(Id uniqueidentifier)
  3.  
  4. INSERT INTO @TASKS
  5. SELECT '9A92A716-D5DB-48F6-8418-DCFF8392018A' --Физ лица перезвоны
  6. INSERT INTO @TASKS
  7. SELECT 'E984DCD7-A62D-4D2D-8A86-416D3FD52C9B' --Физ лица входящая
  8. INSERT INTO @TASKS
  9. SELECT 'CE73BD66-76D4-4999-BEF2-EEFE8A04961E' --Физ лица исходящая
  10.  
  11.  
  12. DECLARE @OPERATORS TABLE (id uniqueidentifier)
  13. INSERT INTO @OPERATORS
  14. SELECT DISTINCT Id
  15. FROM oktell.dbo.A_users WITH(NOLOCK)
  16. -----------------------------------------------------------------------------------------------------------------------------------------------------------------
  17.  
  18. DECLARE @temp TABLE (ideffort uniqueidentifier,idchain uniqueidentifier,idoperator uniqueidentifier, suc int, unsuc int, datetimestart datetime, lenTime float)
  19.  
  20. DECLARE @EffortConnections TABLE (IdEffort uniqueidentifier, IdOperator uniqueidentifier, CallResult int)
  21.  
  22. INSERT INTO @EffortConnections
  23. SELECT IdEffort, IdOperator, CallResult
  24. FROM [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
  25. WHERE CAST(DateTimeStart as date) = @DT
  26.     AND IdTask IN (SELECT * FROM @TASKS)
  27.     AND IdOperator IN (SELECT * FROM @OPERATORS)
  28.     AND IdChain IS NOT NULL
  29.     AND IsOutput = 0
  30.  
  31. DECLARE @Accepted TABLE (IdOperator uniqueidentifier, [Count] int)
  32.  
  33. INSERT INTO @Accepted
  34. SELECT IdOperator
  35.     , COUNT(DISTINCT IdEffort)
  36. FROM @EffortConnections
  37. WHERE CallResult = 5
  38. GROUP BY IdOperator
  39.  
  40. DECLARE @Losted TABLE (IdOperator uniqueidentifier, [Count] int)
  41.  
  42. INSERT INTO @Losted
  43. SELECT IdOperator
  44.     , COUNT(DISTINCT IdEffort)
  45. FROM @EffortConnections
  46. WHERE CallResult != 5
  47. GROUP BY IdOperator
  48.  
  49. -------ПОИСК СТАТУСОВ-----------------------------------------------------------------------------
  50. DECLARE @Statuses TABLE (IdOperator uniqueidentifier, [Status] int, TimeChange datetime)
  51.  
  52. INSERT INTO @Statuses
  53. SELECT UserId
  54.     , [State]
  55.     , TimeChange
  56. FROM [oktell].[dbo].[A_UserStateHistory]
  57. WHERE CAST(TimeChange as date) = @DT
  58.     AND UserId IN (SELECT * FROM @OPERATORS)
  59. GROUP BY UserId, [State], TimeChange, ICode
  60.  
  61. DECLARE @Stat1 TABLE (IdOperator uniqueidentifier, [Status] int, TimeChange datetime)
  62.  
  63. INSERT INTO @Stat1
  64. SELECT IdOperator
  65.     , [Status]
  66.     , TimeChange
  67. FROM @Statuses
  68. ORDER BY IdOperator, TimeChange DESC
  69.  
  70. DECLARE @OpersStatuses TABLE (IdOper uniqueidentifier, [State] nvarchar(20));
  71.  
  72. WITH Stat2 AS
  73. (
  74.     SELECT IdOperator
  75.         , MAX(TimeChange) as TimeChange
  76.     FROM @Statuses
  77.     GROUP BY IdOperator
  78. )
  79.  
  80. INSERT INTO @OpersStatuses
  81. SELECT S2.IdOperator
  82.     , CASE
  83.         WHEN S1.[Status] = 0 THEN 'Отключен'
  84.         WHEN S1.[Status] = 1 THEN 'Готов'
  85.         WHEN S1.[Status] = 2 THEN 'Перерыв'
  86.         WHEN S1.[Status] = 3 THEN 'Нет на месте'
  87.         WHEN S1.[Status] = 5 THEN 'Занят'
  88.         WHEN S1.[Status] = 6 THEN 'Зарезервирован'
  89.         WHEN S1.[Status] = 7 THEN 'Без Телефона'
  90.         ELSE 'Прочее'
  91.     END
  92. FROM Stat2 as S2
  93. LEFT JOIN @Stat1 as S1
  94.     ON S2.TimeChange = S1.TimeChange
  95. ----------------------------------------------------------------------------------------
  96. DECLARE @Result TABLE([Name] nvarchar(50), [State] nvarchar(20), Accepted int, Losted int)
  97.  
  98. INSERT INTO @Result
  99. SELECT U.Name
  100.     , OS.[State]
  101.     , ISNULL(A.[Count], 0) as Accepted
  102.     , ISNULL(L.[Count], 0) as Losted
  103. FROM @OpersStatuses as OS
  104. LEFT JOIN oktell.dbo.A_users as U
  105.     ON OS.IdOper = U.ID
  106. LEFT JOIN @Accepted as A
  107.     ON OS.IdOper = A.IdOperator
  108. LEFT JOIN @Losted as L
  109.     ON OS.IdOper = L.IdOperator
  110.  
  111. DECLARE @acceptedAll int = (SELECT SUM(Accepted) FROM @Result)
  112. DECLARE @lostedAll int = (SELECT SUM(Losted) FROM @Result)
  113.  
  114. INSERT INTO @Result VALUES(' Итого', NULL, @acceptedAll, @lostedAll)
  115.  
  116. SELECT
  117.     [Name] as 'Оператор'
  118.     , [State] as 'Состояние'
  119.     , Accepted as 'Успешных'
  120.     , Losted as 'Пропущенных'
  121. FROM @Result
  122. WHERE Accepted != 0 OR Losted != 0
  123. ORDER BY [Name]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement