Advertisement
WorkAkkaunt

B2B по отделам V2

Aug 1st, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 8.50 KB | None | 0 0
  1. SET DATEFORMAT DMY
  2.  
  3. -----------------
  4. DECLARE @d1 DATETIME =  '18-07-2019 00:00:00.001'
  5. DECLARE @d2 DATETIME =  '19-07-2019 23:59:59.990'
  6. DECLARE @t1 DATETIME =  '01-01-1900 00:00:00.001'
  7. DECLARE @t2 DATETIME =  '01-01-1900 23:59:59.001'
  8. DECLARE @interval INT = 15
  9. DECLARE @gr TABLE(ID uniqueidentifier)
  10.  
  11. INSERT INTO @gr
  12. SELECT ID FROM [oktell].[dbo].[A_Groups]
  13.  
  14.  
  15. --------ПОДГОТОВКА---------
  16. DECLARE @dt01 NVARCHAR(250) =   (CAST(CAST(@d1 AS DATE) AS NVARCHAR(25)) + ' ' + CAST(CAST(@t1 AS TIME(0)) AS NVARCHAR(25)) )
  17. DECLARE @dt02 NVARCHAR(250) =   (CAST(CAST(@d2 AS DATE) AS NVARCHAR(25)) + ' ' + CAST(CAST(@t2 AS TIME(0)) AS NVARCHAR(25)) )
  18. DECLARE @dt1 DATETIME = CONVERT (DATETIME,@dt01,121)
  19. DECLARE @dt2 DATETIME = CONVERT (DATETIME,@dt02,121)
  20. --SELECT @dt1,@dt2
  21. DECLARE @dt1_WHILE DATETIME = @dt1
  22.  
  23.  
  24. ---------ПРИНЯТО------------
  25. ----------------------------
  26. DECLARE @Accepted0 TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), anumberdialed NVARCHAR(250))
  27.  
  28. INSERT INTO @Accepted0 (IdChain, GroupId, GroupName, anumberdialed)
  29. SELECT [IdChain],
  30.         --BUserId,
  31.         [A_Groups].ID AS GroupId,
  32.         [A_Groups].Name
  33.         ,(select top 1 ANumberDialed FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS sc1 WITH (NOLOCK) where sc1.IdChain=con1.IdChain order by TimeStart)
  34. FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS CON1 WITH (NOLOCK)
  35. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS [A_Users]
  36. ON CON1.BUserId = [A_Users].ID
  37. LEFT JOIN [oktell].[dbo].[A_Groups] AS [A_Groups]
  38. ON [A_Users].ParentGroupID = [A_Groups].ID
  39. WHERE [TimeStart] BETWEEN @dt1 AND @dt2
  40.         AND ConnectionType = 5
  41.         AND [A_Groups].ID IS NOT NULL
  42. GROUP BY [IdChain],[A_Groups].ID,[A_Groups].Name
  43. ORDER BY [IdChain]
  44. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  45. DECLARE @Accepted1 TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), anumberdialed NVARCHAR(250))
  46.  
  47. INSERT INTO @Accepted1 (IdChain, GroupId, GroupName, anumberdialed)
  48. SELECT [IdChain],
  49.         --BUserId,
  50.         [A_Groups].ID AS GroupId,
  51.         [A_Groups].Name
  52.         ,(select top 1 ANumberDialed FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS sc1 WITH (NOLOCK) where sc1.IdChain=con1.IdChain order by TimeStart)
  53. FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS CON1 WITH (NOLOCK)
  54. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS [A_Users]
  55. ON CON1.BUserId = [A_Users].ID
  56. LEFT JOIN [oktell].[dbo].[A_Groups] AS [A_Groups]
  57. ON [A_Users].ParentGroupID = [A_Groups].ID
  58. WHERE [TimeStart] BETWEEN @dt1 AND @dt2
  59.         AND ConnectionType = 3
  60.         AND [A_Groups].ID IS NOT NULL
  61. GROUP BY [IdChain],[A_Groups].ID,[A_Groups].Name
  62. ORDER BY [IdChain]
  63.  
  64.  
  65.  
  66. ---------ПРОПУЩЕННО------------
  67. -------------------------------
  68. DECLARE @Missed0 TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), anumberdialed NVARCHAR(250))
  69.  
  70. INSERT INTO @Missed0 (IdChain, GroupId, GroupName, anumberdialed)
  71. SELECT [MissedCalls].[IdChain]
  72.             ,[A_Groups].ID
  73.             ,[A_Groups].Name
  74.             ,(select top 1 ANumberDialed FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS sc1 WITH (NOLOCK) where sc1.IdChain=[MissedCalls].IdChain order by TimeStart)
  75. FROM [oktell].[dbo].[A_Stat_MissedCalls] AS [MissedCalls]
  76. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS [A_Users]
  77.     ON [MissedCalls].BUserId = [A_Users].ID
  78. LEFT JOIN [oktell].[dbo].[A_Groups] AS [A_Groups]
  79.     ON [A_Users].ParentGroupID = [A_Groups].ID
  80. /*Ситуация:Если в отделе А кто-то пропустил звонок, а потом другой пользователь из отедла А ответил на звонок. Необходимо считать такой звонок как принятый этим отедлом и не засчитывать ему пропущенный.*/
  81. FULL OUTER JOIN @Accepted0 AS Accepted
  82.     ON ([MissedCalls].[IdChain] = Accepted.IdChain AND [A_Groups].ID = Accepted.GroupId)
  83. /**********************************************************************************************************************************************************************************************************/
  84. WHERE [MissedCalls].[TimeStart] BETWEEN @dt1 AND @dt2
  85.         AND AOutNumber = AStr
  86.         AND [A_Groups].ID IS NOT NULL
  87.         AND Accepted.IdChain IS NULL /*Убираем принятые из пропущенных*/
  88. GROUP BY [MissedCalls].[IdChain], [A_Groups].ID, [A_Groups].Name
  89. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  90. DECLARE @Missed1 TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), anumberdialed NVARCHAR(250))
  91.  
  92. INSERT INTO @Missed1 (IdChain, GroupId, GroupName, anumberdialed)
  93. SELECT [MissedCalls].[IdChain]
  94.             ,[A_Groups].ID
  95.             ,[A_Groups].Name
  96.             ,(select top 1 ANumberDialed FROM [oktell].[dbo].[A_Stat_Connections_1x1] AS sc1 WITH (NOLOCK) where sc1.IdChain=[MissedCalls].IdChain order by TimeStart)
  97. FROM [oktell].[dbo].[A_Stat_MissedCalls] AS [MissedCalls]
  98. LEFT JOIN [oktell_settings].[dbo].[A_Users] AS [A_Users]
  99.     ON [MissedCalls].BUserId = [A_Users].ID
  100. LEFT JOIN [oktell].[dbo].[A_Groups] AS [A_Groups]
  101.     ON [A_Users].ParentGroupID = [A_Groups].ID
  102. /*Ситуация:Если в отделе А кто-то пропустил звонок, а потом другой пользователь из отедла А ответил на звонок. Необходимо считать такой звонок как принятый этим отедлом и не засчитывать ему пропущенный.*/
  103. FULL OUTER JOIN @Accepted1 AS Accepted
  104.     ON ([MissedCalls].[IdChain] = Accepted.IdChain AND [A_Groups].ID = Accepted.GroupId)
  105. /**********************************************************************************************************************************************************************************************************/
  106. WHERE [MissedCalls].[TimeStart] BETWEEN @dt1 AND @dt2
  107.         AND AOutNumber != AStr
  108.         AND [A_Groups].ID IS NOT NULL
  109.         AND Accepted.IdChain IS NULL /*Убираем принятые из пропущенных*/
  110. GROUP BY [MissedCalls].[IdChain], [A_Groups].ID, [A_Groups].Name
  111. ------------------------------------------------------------------------------------------------------------------------------------
  112.  
  113. ------------------------------------------------------------------------------------------------------------------------------------
  114. DECLARE @Result TABLE (IdChain UNIQUEIDENTIFIER, GroupId UNIQUEIDENTIFIER, GroupName NVARCHAR(250), FlagAccepting0 INT, FlagMissed0 INT, FlagAccepting1 INT, FlagMissed1 INT)
  115.  
  116. INSERT INTO @Result (IdChain, GroupId, GroupName, FlagAccepting0, FlagMissed0, FlagAccepting1, FlagMissed1)
  117. SELECT IdChain, GroupId, GroupName, '1', '0', '0', '0'
  118. FROM @Accepted0
  119.  
  120. INSERT INTO @Result (IdChain, GroupId, GroupName, FlagAccepting0, FlagMissed0, FlagAccepting1, FlagMissed1)
  121. SELECT IdChain, GroupId, GroupName, '0', '0', '1', '0'
  122. FROM @Accepted1
  123.  
  124. INSERT INTO @Result (IdChain, GroupId, GroupName, FlagAccepting0, FlagMissed0, FlagAccepting1, FlagMissed1)
  125. SELECT IdChain, GroupId, GroupName, '0', '1', '0', '0'
  126. FROM @Missed0
  127.  
  128. INSERT INTO @Result (IdChain, GroupId, GroupName, FlagAccepting0, FlagMissed0, FlagAccepting1, FlagMissed1)
  129. SELECT IdChain, GroupId, GroupName, '0', '0', '0', '1'
  130. FROM @Missed1
  131.  
  132.  
  133.  
  134. SELECT
  135. case
  136.     when GroupName='Колл-центр' then 'Операторы ПКК 974-96-44'
  137.     else GroupName end  AS [Группа]
  138.         , COUNT (*) AS [Всего звонков]
  139.         , SUM(FlagAccepting0) AS [Принято внешние]
  140.         , SUM(FlagAccepting1) AS [Принято внутренние]
  141.         , SUM(FlagMissed0) AS [Пропущенно внешние]
  142.         , SUM(FlagMissed1) AS [Пропущенно внутренние]
  143.         ,ISNULL(ROUND(CAST(SUM(FlagAccepting0) AS float) * 100 / NULLIF((CAST(COUNT (*) AS float)),0),1),0) AS [Принято внешние, %]
  144.         ,ISNULL(ROUND(CAST(SUM(FlagAccepting1) AS float) * 100 / NULLIF((CAST(COUNT (*) AS float)),0),1),0) AS [Принято внутренние, %]
  145.         ,ISNULL(ROUND(CAST(SUM(FlagMissed0) AS float) * 100 / NULLIF((CAST(COUNT (*) AS float)),0),1),0) AS [Пропущенно внешние, %]
  146.         ,ISNULL(ROUND(CAST(SUM(FlagMissed1) AS float) * 100 / NULLIF((CAST(COUNT (*) AS float)),0),1),0) AS [Пропущенно внутренние, %]
  147. FROM @Result
  148. WHERE GroupName<>'ТПП ИАС'
  149. AND GroupId IN (SELECT ID FROM @gr)
  150. GROUP BY [GroupName]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement