ABAKh Ответов: 1

Как отфильтровать много записей с одним и тем же идентификатором


У меня есть система тикетов и я хочу отправить письмо на сотрудника, который назначен билетов на него не ответили или не решается на (билетов) время, так мне нужен просто запрос, чтобы отфильтровать записи, чтобы отправить индивидуальные письма, Электронная почта для каждого сотрудника только с его билеты, которые присвоены ему, и эти некоторые столбцы таблицы(TicketId, TicketDate, TicketStatusId, AssignToId, AssignToIdEmail, RespondDate, ResolvedDate), поэтому любое предложение оценили, а если требуются дополнительные пояснения, Скажите, а где здесь неоднозначность.
Спасибо,

Что я уже пробовал:

Я попробовал этот код, но он дает все записи(ибо если у меня есть два сотрудника, то он дает все записи два раза), а не одну за другой

DECLARE @AssignToId INT
SET @AssignToId = 0
WHILE (@AssignToId < (select count(distinct AssignToId) from TicketDetails
where ((RespondDate is not null) or (LEN(RespondDate) !=0)) and ((TicketStatusId = 1) or (TicketStatusId = 5)) and RespondDate < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()+1)) and AssignToId=AssignToId))

BEGIN

select TicketId, TicketDate, ProjectNameEn, RegionNameEn, CityNameEn, AssignToNameEn, PriorityNameEn, CreatedByEmployeeEn, RespondDate, AssignToEmail, AssignToSupervisorEmail, AssignToId
from TicketDetails
where ((RespondDate is not null) or (LEN(RespondDate) !=0)) and ((TicketStatusId = 1) or (TicketStatusId = 5)) and RespondDate < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()+1)) and AssignToId=AssignToId
order by TicketId

Set @AssignToId = @AssignToId + 1
END

ABAKh

Это и есть код:
Объявить @AssignToId INT
SET @AssignToId = 0
WHILE (@AssignToId < (select count(distinct AssignToId) from TicketDetails
где ((RespondDate не null) или (лен(RespondDate) !=0)) и ((TicketStatusId = 1) или (TicketStatusId = 5)) и RespondDate &ЛТ; функция dateadd(DD, то 0, то функция datediff(DD, то 0, функции getdate()+1)) и AssignToId=AssignToId))

НАЧАТЬ

выберите TicketId, TicketDate, ProjectNameEn, RegionNameEn, CityNameEn, AssignToNameEn, PriorityNameEn, CreatedByEmployeeEn, RespondDate, AssignToEmail, AssignToSupervisorEmail, AssignToId
из TicketDetails
где ((RespondDate не null) или (лен(RespondDate) !=0)) и ((TicketStatusId = 1) или (TicketStatusId = 5)) и RespondDate &ЛТ; функция dateadd(DD, то 0, то функция datediff(DD, то 0, функции getdate()+1)) и AssignToId=AssignToId
заказ по TicketId

Set @AssignToId = @AssignToId + 1
КОНЕЦ

ZurdoDev

SQL-кодирование на этой неделе не работает. Он работает в наборах, а не на отдельных значениях, как у вас с параметром @ASsingTold.

ВЫБИРАТЬ *
Из ticketsDetails
Где COALESCE(RespondDate, '2050-01-01') < GETDATE() + 1

Вам не нужны все эти странные проверки на RespondDate, предполагая, что это поле даты.

Кроме того, я понятия не имею, что вы пытаетесь сделать с @AssignTold, но что бы это ни было, вы не можете сделать это таким образом.

Кроме того, ваше предложение where имеет AssignTold = AssignTold, что совпадает с true. Вы, вероятно, имели в виду @AssignTold, но опять же, вы не можете сделать это таким образом.

ABAKh

Тогда, если я не могу сделать это таким образом, Пожалуйста, объясните мне, как это сделать

1 Ответов

Рейтинг:
12

OriginalGriff

Применение лен:

where ((RespondDate is not null) or (LEN(RespondDate) !=0))
подразумевается, что столбец RespondDate является полем VARCHAR или NVARCHAR - и это, вероятно, большая часть вашей проблемы: сравнение строк решается путем сравнения первой пары различных символов в двух строках, все остальные символы игнорируются. Поэтому, если вы начнете искать сегодня и по умолчанию используете европейский формат данных в своих полях, вы обнаружите, что каждая дата, где день месяца меньше 27 (потому что сегодня 26-е число), месяц и год будут проигнорированы.

Если это так, то измените свою БД и сохраните значения в соответствующих типах данных: числа в INT FLOAT или DECIMAL, даты в DATE, DATETIME или DATETIME2 и так далее. Если вы этого не сделаете, то подобные проблемы будут возникать каждый раз, когда вы пытаетесь использовать эти данные (а также другие, когда ваши данные вводятся людьми, использующими другую систему дат)


ABAKh

Я жду Вашего ответа, господин Зурдодев, как это сделать(код, руководство, любая вещь, которая заставит меня завершить это), я ценю ваш ответ.