Advertisement
WorkAkkaunt

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

Jul 19th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.57 KB | None | 0 0
  1. SET DATEFORMAT DMY
  2.  
  3.  
  4. -----------------
  5. /*
  6. DECLARE @d1 DATETIME =  '04-12-2018 00:00:00.001'
  7. DECLARE @d2 DATETIME =  '04-12-2018 23:59:59.990'
  8. DECLARE @t1 DATETIME =  '01-01-1900 11:30:00.001'
  9. DECLARE @t2 DATETIME =  '01-01-1900 18:40:00.001'
  10. DECLARE @interval INT = 15
  11. */
  12.  
  13.  
  14. --------ПОДГОТОВКА---------
  15. DECLARE @dt01 NVARCHAR(250) =   (CAST(CAST(@d1 AS DATE) AS NVARCHAR(25)) + ' ' + CAST(CAST(@t1 AS TIME(0)) AS NVARCHAR(25)) )
  16. DECLARE @dt02 NVARCHAR(250) =   (CAST(CAST(@d2 AS DATE) AS NVARCHAR(25)) + ' ' + CAST(CAST(@t2 AS TIME(0)) AS NVARCHAR(25)) )
  17. DECLARE @dt1 DATETIME = CONVERT (DATETIME,@dt01,121)
  18. DECLARE @dt2 DATETIME = CONVERT (DATETIME,@dt02,121)
  19. --SELECT @dt1,@dt2
  20. DECLARE @dt1_WHILE DATETIME = @dt1
  21.  
  22.  
  23. ---------ПРИНЯТО------------
  24. ----------------------------
  25. DECLARE @Accepted TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), anumberdialed NVARCHAR(250))
  26.  
  27. INSERT INTO @Accepted (IdChain, GroupId, GroupName, anumberdialed)
  28. SELECT [IdChain],
  29.         --BUserId,
  30.         [A_Groups].ID AS GroupId,
  31.         [A_Groups].Name
  32.         ,(SELECT top 1 ANumberDialed FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS sc1 WITH (NOLOCK) WHERE sc1.IdChain=con1.IdChain ORDER BY TimeStart)
  33. FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS CON1 WITH (NOLOCK)
  34. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS [A_Users]
  35. ON CON1.BUserId = [A_Users].ID
  36. LEFT JOIN [oktell].[dbo].[A_Groups] AS [A_Groups]
  37. ON [A_Users].ParentGroupID = [A_Groups].ID
  38. WHERE [TimeStart] BETWEEN @dt1 AND @dt2
  39.         AND ConnectionType = 5
  40.         AND [A_Groups].ID IS NOT NULL
  41.         --AND IdChain in ('C0E4403C-BE90-4F68-8F96-6F52D02A254A','7B6A6E4F-A1F6-4786-A2BB-7535DD0FF009')
  42. GROUP BY [IdChain],[A_Groups].ID,[A_Groups].Name
  43. ORDER BY [IdChain]
  44.  
  45.  
  46.  
  47. ---------ПРОПУЩЕННО------------
  48. -------------------------------
  49. DECLARE @Missed TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), anumberdialed NVARCHAR(250))
  50.  
  51. INSERT INTO @Missed (IdChain, GroupId, GroupName, anumberdialed)
  52. SELECT [MissedCalls].[IdChain]
  53.             ,[A_Groups].ID
  54.             ,[A_Groups].Name
  55.             ,(SELECT top 1 ANumberDialed FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS sc1 WITH (NOLOCK) WHERE sc1.IdChain=[MissedCalls].IdChain ORDER BY TimeStart)
  56. FROM [oktell].[dbo].[A_Stat_MissedCalls] AS [MissedCalls]
  57. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS [A_Users]
  58. ON [MissedCalls].BUserId = [A_Users].ID
  59. LEFT JOIN [oktell].[dbo].[A_Groups] AS [A_Groups]
  60. ON [A_Users].ParentGroupID = [A_Groups].ID
  61. LEFT JOIN  [oktell].[dbo].[A_Stat_Connections_1x1] AS CON2
  62. ON (CON2.IdChain = MissedCalls.IdChain AND ConnectionType = 4 AND IdPrev IS NULL)
  63. /*Ситуация:Если в отделе А кто-то пропустил звонок, а потом другой пользователь из отедла А ответил на звонок. Необходимо считать такой звонок как принятый этим отедлом и не засчитывать ему пропущенный.*/
  64. FULL OUTER JOIN @Accepted AS Accepted
  65. ON ([MissedCalls].[IdChain] = Accepted.IdChain AND [A_Groups].ID = Accepted.GroupId)
  66. /**********************************************************************************************************************************************************************************************************/
  67. WHERE [MissedCalls].[TimeStart] BETWEEN @dt1 AND @dt2
  68.         AND [A_Groups].ID IS NOT NULL
  69.         AND Accepted.IdChain IS NULL /*Убираем принятые из пропущенных*/
  70. GROUP BY [MissedCalls].[IdChain], [A_Groups].ID, [A_Groups].Name
  71. -------------------------------
  72.  
  73.  
  74. INSERT INTO @Missed (IdChain, GroupId, GroupName, anumberdialed)
  75.  
  76. SELECT [IdChain],[OLP_GroupNumbers].GroupId, [OLP_GroupNumbers].[GroupName]
  77. ,(SELECT top 1 ANumberDialed FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS sc1 WITH (NOLOCK) WHERE sc1.IdChain=CON3.IdChain ORDER BY TimeStart)
  78. FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS CON3
  79. LEFT JOIN [oktell].[dbo].[OLP_GroupNumbers] AS [OLP_GroupNumbers]
  80. ON CON3.BOutNumber LIKE '%'+ [OLP_GroupNumbers].Phone
  81. WHERE [ConnectionType] = 4
  82.     AND [TimeStart] BETWEEN @dt1 AND @dt2
  83.     AND [IdPrev] IS NULL
  84.     AND [IdChain] NOT IN (SELECT DISTINCT [IdChain]
  85.                         FROM [oktell].[dbo].[A_Stat_Connections_1x1]
  86.                         WHERE [ConnectionType] IN (5,6)
  87.                                 AND [TimeStart] BETWEEN @dt1 AND @dt2
  88.                         )
  89.     AND [OLP_GroupNumbers].[GroupName] IS NOT NULL
  90.     AND [IdChain] NOT IN (SELECT [IdChain] FROM @Missed)
  91.  
  92.  
  93. ------------------------------------------------------------------------------------------------------------------------------------
  94. ---------Разбиение "Справочно-информационная служба" на 2 записи (+"НККДЦ") по номерам 3001 и 3002. Обращение  AI-14517.------------
  95. ------------------------------------------------------------------------------------------------------------------------------------
  96. UPDATE @Accepted
  97. SET GroupName = 'НККДЦ' WHERE anumberdialed = '3002'
  98. --select * from @Accepted where anumberdialed = '3002'
  99.  
  100. UPDATE @Missed
  101. SET GroupName = 'НККДЦ' WHERE anumberdialed = '3002'
  102. --select * from @Missed where anumberdialed = '3002'
  103. ------------------------------------------------------------------------------------------------------------------------------------
  104. ------------------------------------------------------------------------------------------------------------------------------------
  105. ------------------------------------------------------------------------------------------------------------------------------------
  106.  
  107.  
  108. DECLARE @RESULT TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), FlagAccepting INT, FlagMissed INT)
  109.  
  110. INSERT INTO @RESULT (IdChain, GroupId, GroupName, FlagAccepting, FlagMissed)
  111. SELECT IdChain, GroupId, GroupName, '1', '0'
  112. FROM @Accepted
  113.  
  114. INSERT INTO @RESULT (IdChain, GroupId, GroupName, FlagAccepting, FlagMissed)
  115. SELECT IdChain, GroupId, GroupName, '0', '1'
  116. FROM @Missed
  117.  
  118.  
  119.  
  120. SELECT
  121. CASE
  122.     WHEN GroupName='Колл-центр' THEN 'Операторы ПКК 974-96-44'
  123.     ELSE GroupName END  AS [Группа]
  124.         ,COUNT (*) AS [Всего звонков]
  125.         ,SUM(FlagAccepting) AS [Принято]
  126.         ,SUM(FlagMissed) AS [Пропущенно]
  127.         ,ISNULL(ROUND(CAST(SUM(FlagAccepting) AS FLOAT) * 100 / NULLIF((CAST(COUNT (*) AS FLOAT)),0),1),0) AS [Принято, %]
  128.         ,ISNULL(ROUND(CAST(SUM(FlagMissed) AS FLOAT) * 100 / NULLIF((CAST(COUNT (*) AS FLOAT)),0),1),0) AS [Пропущенно, %]
  129. FROM @RESULT
  130. WHERE GroupName<>'ТПП ИАС'
  131. AND GroupId IN (SELECT ID FROM @gr)
  132. GROUP BY [GroupName]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement