Advertisement
WorkAkkaunt

Звонков В2В по отделам

Aug 6th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.82 KB | None | 0 0
  1. -----------------
  2. DECLARE @d1 DATETIME =  '20190731 00:00'
  3. DECLARE @d2 DATETIME =  '20190731 23:59'
  4. DECLARE @t1 DATETIME =  '19000101 00:00'
  5. DECLARE @t2 DATETIME =  '19000101 23:59'
  6.  
  7. DECLARE @gr TABLE(ID uniqueidentifier)
  8.  
  9. INSERT INTO @gr
  10. SELECT ID FROM [oktell].[dbo].[A_Groups]
  11. -----------------------------------------------------------------------------------------------------------------------------
  12.  
  13. -------ФИЛЬТРУЕМ [oktell].[dbo].[A_Stat_Connections_1x1]---------------------------------------------------------------------
  14. DECLARE @StatConnections TABLE(IdChain uniqueidentifier, GroupId uniqueidentifier, ConnectionType int)
  15.  
  16. INSERT INTO @StatConnections
  17. SELECT IdChain, AG.ID, ConnectionType
  18. FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS SC WITH (NOLOCK)
  19. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS AU
  20.     ON SC.BUserId = AU.ID
  21. LEFT JOIN [oktell].[dbo].[A_Groups] AS AG
  22.     ON AU.ParentGroupID = AG.ID
  23. WHERE TimeStart BETWEEN @d1 AND @d2
  24.     AND CAST(TimeStart as time) BETWEEN CAST(@t1 as time) AND CAST (@t2 as time)
  25.     AND AG.ID IN (SELECT * FROM @gr)
  26. ------------------------------------------------------------------------------------------------------------------------------
  27.  
  28. ------СЧИТАЕМ ВНЕШНИЕ ПРИНЯТЫЕ ЗВОНКИ-----------------------------------------------------------------------------------------
  29. DECLARE @ExternalAccepted TABLE(GroupId uniqueidentifier, [Count] int)
  30.  
  31. INSERT INTO @ExternalAccepted
  32. SELECT GroupId, COUNT(DISTINCT IdChain)
  33. FROM @StatConnections
  34. WHERE ConnectionType = 5
  35. GROUP BY GroupId
  36.  
  37. --SELECT * FROM @ExternalAccepted
  38. ------------------------------------------------------------------------------------------------------------------------------
  39.  
  40. ------СЧИТАЕМ ВНУТРЕННИЕ ПРИНЯТЫЕ ЗВОНКИ--------------------------------------------------------------------------------------
  41. DECLARE @InternalAccepted TABLE(GroupId uniqueidentifier, [Count] int)
  42.  
  43. INSERT INTO @InternalAccepted
  44. SELECT GroupId, COUNT(DISTINCT IdChain)
  45. FROM @StatConnections
  46. WHERE ConnectionType = 3
  47. GROUP BY GroupId
  48.  
  49. --SELECT * FROM @InternalAccepted
  50. -------------------------------------------------------------------------------------------------------------------------------
  51.  
  52. -------ФИЛЬТРУЕМ ПРОПУЩЕННЫЕ ЗВОНКИ--------------------------------------------------------------------------------------------
  53. DECLARE @Missed TABLE (IdChain uniqueidentifier, GroupId uniqueidentifier, Number nvarchar(200))
  54.  
  55. INSERT INTO @Missed
  56. SELECT MC.IdChain
  57.             , AG.ID
  58.             , MC.AOutNumber
  59. FROM [oktell].[dbo].[A_Stat_MissedCalls] AS MC
  60. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS AU
  61.     ON MC.BUserId = AU.ID
  62. LEFT JOIN [oktell].[dbo].[A_Groups] AS AG
  63.     ON AU.ParentGroupID = AG.ID
  64. /*Ситуация:Если в отделе А кто-то пропустил звонок, а потом другой пользователь из отедла А ответил на звонок. Необходимо считать такой звонок как принятый этим отедлом и не засчитывать ему пропущенный.*/
  65. FULL OUTER JOIN @StatConnections AS Accepted
  66.     ON (MC.[IdChain] = Accepted.IdChain AND AG.ID = Accepted.GroupId)
  67. --/**********************************************************************************************************************************************************************************************************/
  68. WHERE MC.TimeStart BETWEEN @d1 AND @d2
  69.         AND CAST(MC.TimeStart as time) BETWEEN CAST(@t1 as time) AND CAST (@t2 as time)
  70.         AND AG.ID IN (SELECT * FROM @gr)
  71.         AND Accepted.IdChain IS NULL /*Убираем принятые из пропущенных*/
  72. ------------------------------------------------------------------------------------------------------------------------------
  73.  
  74. ------СЧИТАЕМ ВНЕШНИЕ ПРОПУЩЕННЫЕ ЗВОНКИ-----------------------------------------------------------------------------------------
  75. DECLARE @ExternalMissed TABLE(GroupId uniqueidentifier, [Count] int)
  76.  
  77. INSERT INTO @ExternalMissed
  78. SELECT GroupId, COUNT(DISTINCT IdChain)
  79. FROM @Missed
  80. WHERE LEN(Number) >= 10
  81. GROUP BY GroupId
  82.  
  83. --SELECT * FROM @ExternalMissed
  84. ------------------------------------------------------------------------------------------------------------------------------
  85.  
  86. ------СЧИТАЕМ ВНУТРЕННИЕ ПРОПУЩЕННЫЕ ЗВОНКИ--------------------------------------------------------------------------------------
  87. DECLARE @InternalMissed TABLE(GroupId uniqueidentifier, [Count] int)
  88.  
  89. INSERT INTO @InternalMissed
  90. SELECT GroupId, COUNT(DISTINCT IdChain)
  91. FROM @Missed
  92. WHERE LEN(Number) < 10
  93. GROUP BY GroupId
  94.  
  95. --SELECT * FROM @InternalMissed
  96. -------------------------------------------------------------------------------------------------------------------------------
  97.  
  98. ------СЧИТАЕМ ВСЕ ЗВОНКИ-------------------------------------------------------------------------------------------------------
  99. DECLARE @AllCallS TABLE(GroupId uniqueidentifier, [Count] int)
  100.  
  101. INSERT INTO @AllCalls
  102. SELECT G.ID
  103.     , ISNULL(ISNULL(EA.[Count], 0) + ISNULL(IA.[Count], 0) + ISNULL(EM.[Count], 0) + ISNULL(IM.[Count], 0), 0)
  104. FROM @gr as G
  105. LEFT JOIN @InternalAccepted AS IA
  106.     ON G.ID = IA.GroupId
  107. LEFT JOIN @ExternalAccepted AS EA
  108.     ON G.ID = EA.GroupId
  109. LEFT JOIN @InternalMissed AS IM
  110.     ON G.ID = IM.GroupId
  111. LEFT JOIN @ExternalMissed AS EM
  112.     ON G.ID = EM.GroupId
  113. -------------------------------------------------------------------------------------------------------------------------------
  114.  
  115. -------------------------------------------------------------------------------------------------------------------------------
  116. SELECT AG.Name AS 'Группа'
  117.     , AC.[Count] AS 'Всего звонков'
  118.     , ISNULL(EA.[Count], 0) AS 'Принято внешние'
  119.     , ISNULL(IA.[Count], 0) AS 'Принято внутренние'
  120.     , ISNULL(EM.[Count], 0) AS 'Пропущено внешние'
  121.     , ISNULL(IM.[Count], 0) AS 'Пропущенные внутренние'--[dbo].[GetPersent]
  122.     , ISNULL((SELECT [dbo].[GetPersent](EA.[Count], AC.[Count])), '0%') AS 'Принято внешние, %'
  123.     , ISNULL((SELECT [dbo].[GetPersent](IA.[Count], AC.[Count])), '0%') AS 'Принято внутренние, %'
  124.     , ISNULL((SELECT [dbo].[GetPersent](EM.[Count], AC.[Count])), '0%') AS 'Пропущено внешние, %'
  125.     , ISNULL((SELECT [dbo].[GetPersent](IM.[Count], AC.[Count])), '0%') AS 'Пропущенные внутренние, %'
  126. FROM @AllCallS AS AC
  127. LEFT JOIN [oktell].[dbo].[A_Groups] AS AG
  128.     ON AC.GroupId = AG.ID
  129. LEFT JOIN @InternalAccepted AS IA
  130.     ON AC.GroupId = IA.GroupId
  131. LEFT JOIN @ExternalAccepted AS EA
  132.     ON AC.GroupId = EA.GroupId
  133. LEFT JOIN @InternalMissed AS IM
  134.     ON AC.GroupId = IM.GroupId
  135. LEFT JOIN @ExternalMissed AS EM
  136.     ON AC.GroupId = EM.GroupId
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement