Примеры пользовательских процедур — различия между версиями
Материал из Oktell
Строка 4: | Строка 4: | ||
+ | == Выбор оператора в зависимости от его приоритета == | ||
+ | |||
+ | таблица создана с полями id name mark | ||
+ | берет первых менее опытных операторов с оценкой меньше 50 и более опытных после если прочие заняты. | ||
+ | в случайном порядке чтобы не нагружать одного если потом слишком маленький | ||
+ | |||
+ | <pre> | ||
+ | DECLARE @Id uniqueidentifier | ||
+ | IF (@idtask = '703DDF3A-47E5-4C87-AF0C-5E90130819A8') | ||
+ | BEGIN | ||
+ | SELECT * FROM (SELECT TOP 1000 [id] | ||
+ | FROM [oktell].[dbo].[Poryadok_operatory] | ||
+ | wHERE mark < 50 order by NEWID()) a | ||
+ | UNION ALL | ||
+ | SELECT * FROM | ||
+ | (SELECT TOP 1000 [id] | ||
+ | FROM [oktell].[dbo].[Poryadok_operatory] | ||
+ | WHERE mark >= 50 | ||
+ | ORDER BY NEWID() | ||
+ | ) b | ||
+ | END | ||
+ | </pre> | ||
==С закреплением оператора== | ==С закреплением оператора== |
Версия 11:34, 19 декабря 2014
Содержание
Выбор оператора в зависимости от его приоритета
таблица создана с полями id name mark берет первых менее опытных операторов с оценкой меньше 50 и более опытных после если прочие заняты. в случайном порядке чтобы не нагружать одного если потом слишком маленький
DECLARE @Id uniqueidentifier IF (@idtask = '703DDF3A-47E5-4C87-AF0C-5E90130819A8') BEGIN SELECT * FROM (SELECT TOP 1000 [id] FROM [oktell].[dbo].[Poryadok_operatory] wHERE mark < 50 order by NEWID()) a UNION ALL SELECT * FROM (SELECT TOP 1000 [id] FROM [oktell].[dbo].[Poryadok_operatory] WHERE mark >= 50 ORDER BY NEWID() ) b END
С закреплением оператора
Пользовательская процедур
IF (@idtask = 'B8A22910-BFA4-480D-BFB1-151D0C06F93B') BEGIN SELECT @Id = operatorid FROM TableMain WHERE Id = @idabonent IF (@Id is NULL) BEGIN SELECT u.Id FROM A_Users u INNER JOIN A_UserParams up ON u.Id = up.Iduser WHERE IsOperator = 1 ORDER BY NEWID() END ELSE BEGIN SELECT @Id Id END
С закреплением оператора и проверкой статуса
IF (@idtask = 'B77E5601-A103-4A41-B1FD-6E82EEB6B46A') BEGIN DECLARE @state INT SELECT @ID = idoperator FROM clients WHERE id = @idabonent SELECT top 1 @state = h.state FROM A_Users u LEFT JOIN (SELECT h.* FROM (SELECT UserId, max(TimeChange) TimeChange FROM A_UserStateHistory GROUP BY UserId ) t JOIN A_UserStateHistory h ON t.UserId = h.UserId AND h.TimeChange = t.TimeChange ) h ON h.UserId = u.Id WHERE u.id = @ID IF (@state= 0 or @state is null) BEGIN SELECT u.Id FROM A_Users u INNER JOIN A_UserParams up ON u.Id = up.Iduser WHERE IsOperator = 1 ORDER BY NEWID() END ELSE BEGIN SELECT @ID Id END END