WorkAkkaunt

Задание для MS SQL Server, подсчет пропущенных и отвеченных

Oct 2nd, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.43 KB | None | 0 0
  1. DECLARE @TASKS_GRAFANA TABLE (
  2.     Number INT
  3.    ,Name NVARCHAR(100)
  4.    ,Id UNIQUEIDENTIFIER PRIMARY KEY
  5. )
  6.  
  7. INSERT INTO @TASKS_GRAFANA
  8.     VALUES (1, 'Driver Class Courier', '319EC8C2-FE14-4C6C-AFA2-01FCBC718C14')
  9. INSERT INTO @TASKS_GRAFANA
  10.     VALUES (2, 'B2C User Class Courier', '173ABDEE-9CA2-4A7D-B4C4-42E4EE436C06')
  11. INSERT INTO @TASKS_GRAFANA
  12.     VALUES (3, 'B2B User Class Courier', '1978EA8D-1838-4CF0-B5EE-70AEC7C88315')
  13. INSERT INTO @TASKS_GRAFANA
  14.     VALUES (4, 'Driver Class Courier RESERVE', '6830E035-0316-4799-9034-6CBBD6D89C4E')
  15. INSERT INTO @TASKS_GRAFANA
  16.     VALUES (5, 'B2C VIP', 'FE2DE479-0F34-4AE9-8DB2-01F6EAC482C1')
  17. INSERT INTO @TASKS_GRAFANA
  18.     VALUES (6, 'English', '1EB1A40F-48AA-48BF-836A-A5F437D4E9B6')
  19. INSERT INTO @TASKS_GRAFANA
  20.     VALUES (7, 'B2C In ride', 'D69A7932-9761-44A4-8B03-E3BFD8577557')
  21. INSERT INTO @TASKS_GRAFANA
  22.     VALUES (8, 'B2C Not in ride', 'B4CDB351-343C-4854-B024-090ED195F31C')
  23. INSERT INTO @TASKS_GRAFANA
  24.     VALUES (9, 'B2D in corp ride', 'BBC7F13A-B219-413B-A8A3-4FC6D1325EC0')
  25. INSERT INTO @TASKS_GRAFANA
  26.     VALUES (10, 'B2D Night&weekend', '4AB8D485-4F73-4F6B-B4A5-AAB8F2B3C1A7')
  27. INSERT INTO @TASKS_GRAFANA
  28.     VALUES (11, 'B2D Not in ride', '667E72FF-3EE4-428E-8D54-899A5E9A32CB')
  29. INSERT INTO @TASKS_GRAFANA
  30.     VALUES (12, 'B2D Premium', '9DC79009-F8B6-4EF7-B405-98BE950C5B72')
  31. INSERT INTO @TASKS_GRAFANA
  32.     VALUES (13, 'B2B VIP', '63C1876A-2FC0-4A62-8B16-B0515D20A5D1')
  33. INSERT INTO @TASKS_GRAFANA
  34.     VALUES (14, 'B2B In ride', '1E7BA857-4A1A-4E76-98B0-24273C1120C7')
  35. INSERT INTO @TASKS_GRAFANA
  36.     VALUES (15, 'B2B Booking a ride', 'D7E48FA6-0061-4EBB-A231-B32F690FD527')
  37. INSERT INTO @TASKS_GRAFANA
  38.     VALUES (16, 'B2D Статусы операторов кастомные!', '1CF311A8-CD90-42CC-B49C-B61B4051031E')
  39. INSERT INTO @TASKS_GRAFANA
  40.     VALUES (17, 'SMB B2B in ride', '08533862-B6A6-4CC8-8C84-F038AEC5EAF9')
  41. INSERT INTO @TASKS_GRAFANA
  42.     VALUES (18, 'B2B not in ride', 'A848E0ED-6554-4472-80D5-9A55640BE384')
  43. INSERT INTO @TASKS_GRAFANA
  44.     VALUES (19, 'B2B in ride Gett 2.0', '30FBFBB3-74A1-4021-8A32-395CCBFBFCD4')
  45. INSERT INTO @TASKS_GRAFANA
  46.     VALUES (20, 'B2B not in ride Gett 2.0', 'EBB40B52-2E39-4F96-8DF9-9159A2EACAE4')
  47. INSERT INTO @TASKS_GRAFANA
  48.     VALUES (21, 'B2B Phone booking Gett 2.0', 'DFF64BE9-074F-486A-BE74-20CA1E9D306A')
  49. INSERT INTO @TASKS_GRAFANA
  50.     VALUES (22, 'Nokia', '5DE3F3EF-8514-4073-A6AA-5AC6B96A558C')
  51.  
  52. SELECT
  53.     IdChain
  54.    ,IdTask
  55.    ,DateTimeStart
  56.    ,CallResult
  57.    ,IsRecorded
  58.    ,CAST(LenTime AS INT) [LenTime]
  59.    ,CAST(LenQueue AS INT) [LenQueue] INTO #EffortConnections
  60. FROM oktell_cc_temp.dbo.A_Cube_CC_EffortConnections WITH (NOLOCK)
  61. WHERE DateStart = CAST(CAST(GETDATE() AS DATE) AS DATETIME)
  62. AND IdChain IS NOT NULL
  63. AND (IdOperator != 'AB000000-0000-0000-0000-000000000000'
  64. OR IdOperator IS NULL)
  65. AND IsOutput = 0
  66.  
  67. SELECT
  68.     IdChain INTO #StatIdChains
  69. FROM oktell..A_Stat_Connections_1x1 WITH (NOLOCK)
  70. WHERE IdChain IN (SELECT
  71.         IdChain
  72.     FROM #EffortConnections)
  73. AND ConnectionType = 6
  74. AND (ANumberDialed LIKE '99_'
  75. OR Bstr LIKE '734300%')
  76. -------------------------------------------------------------------------------------------------------
  77.  
  78. SELECT
  79.     IdChain
  80.    ,IdTask
  81.    ,DateTimeStart
  82.    ,CallResult
  83.    ,IsRecorded INTO #EffortConnections1
  84. FROM #EffortConnections ec
  85. WHERE ec.DateTimeStart = (SELECT
  86.         MAX(ec1.DateTimeStart)
  87.     FROM #EffortConnections ec1
  88.     WHERE ec1.IdChain = ec.IdChain
  89.     AND ec1.IdTask = ec.IdTask)
  90.  
  91. DECLARE @Success TABLE (
  92.     IdTask UNIQUEIDENTIFIER PRIMARY KEY
  93.    ,[Count] INT
  94.    ,AvgTalking INT
  95.    ,AvgWaiting INT
  96. )
  97.  
  98. INSERT INTO @Success
  99.     SELECT
  100.         ec.IdTask
  101.        ,COUNT(*)
  102.        ,AVG(ec.LenTime)
  103.        ,AVG(ec.LenQueue)
  104.     FROM #EffortConnections ec
  105.     WHERE IsRecorded = 1
  106.     AND DateTimeStart = (SELECT
  107.             MAX(DateTimeStart)
  108.         FROM #EffortConnections ec1
  109.         WHERE ec.IdChain = ec1.IdChain)
  110.     AND IdChain NOT IN (SELECT
  111.             IdChain
  112.         FROM #StatIdChains)
  113.     GROUP BY ec.IdTask
  114.  
  115. DROP TABLE #EffortConnections
  116.  
  117. DECLARE @Losted TABLE (
  118.     IdTask UNIQUEIDENTIFIER PRIMARY KEY
  119.    ,[Count] INT
  120. )
  121.  
  122. INSERT INTO @Losted
  123.     SELECT
  124.         ec.IdTask
  125.        ,COUNT(*) [Count]
  126.     FROM #EffortConnections1 ec
  127.     WHERE IsRecorded IS NULL
  128.     AND DateTimeStart = (SELECT
  129.             MAX(DateTimeStart)
  130.         FROM #EffortConnections1 ec1
  131.         WHERE ec.IdChain = ec1.IdChain)
  132.     AND IdChain NOT IN (SELECT
  133.             IdChain
  134.         FROM #StatIdChains)
  135.     GROUP BY IdTask
  136.  
  137. DROP TABLE #EffortConnections1
  138. DROP TABLE #StatIdChains
  139.  
  140. DECLARE @Result TABLE (
  141.     Number INT
  142.    ,Task NVARCHAR(100)
  143.    ,Total INT
  144.    ,Success INT
  145.    ,Losted INT
  146. )
  147.  
  148. INSERT INTO @Result
  149.     SELECT
  150.         t.Number
  151.        ,t.Name
  152.        ,ISNULL(s.Count, 0) + ISNULL(l.Count, 0)
  153.        ,ISNULL(s.Count, 0)
  154.        ,ISNULL(l.Count, 0)
  155.     FROM @TASKS_GRAFANA t
  156.     LEFT JOIN @Success s
  157.         ON t.Id = s.IdTask
  158.     LEFT JOIN @Losted l
  159.         ON t.Id = l.IdTask
  160.     WHERE ISNULL(s.Count, 0) + ISNULL(l.Count, 0) <> 0
  161.     ORDER BY t.Number
  162.  
  163. DECLARE @_number INT
  164. DECLARE @_all INT
  165. DECLARE @_success INT
  166. DECLARE @_losted INT
  167.  
  168. DECLARE @Iterator CURSOR
  169.  
  170. SET @Iterator = CURSOR SCROLL FOR SELECT
  171.     Number
  172.    ,Total
  173.    ,Success
  174.    ,Losted
  175. FROM @Result
  176.  
  177. OPEN @Iterator
  178. FETCH NEXT FROM @Iterator INTO @_number, @_all, @_success, @_losted
  179.  
  180. WHILE @@FETCH_STATUS = 0
  181. BEGIN
  182. UPDATE oktell.dbo.tbl_dashboardgrafana_tasks
  183. SET coverage = IIF(@_all != 0, CAST((CAST(@_success AS FLOAT) / @_all) * 100 AS INT), 0)
  184.    ,missed = @_losted
  185.    ,answered = @_success
  186. WHERE id = @_number
  187.  
  188. FETCH NEXT FROM @Iterator INTO @_number, @_all, @_success, @_losted
  189. END
  190.  
  191. CLOSE @Iterator
  192. DEALLOCATE @Iterator
Add Comment
Please, Sign In to add comment