Что-то вроде этого сделает это.
Используйте CTE, чтобы создать свой пользовательский запрос и поместить в него свои условия фильтра, связанные с пользователем, затем оставьте это в своем расписании и примените там условия своего фильтра времени. Это позволяет избежать левого соединения двух необработанных таблиц, но затем применить фильтр к правому столу, который вызывает внутреннее соединение под колпаком.
EDIT:
Это рабочий пример того, чего вы пытаетесь достичь. Я значительно упростил структуру таблицы, поскольку столбцы, указанные в запросе, не соответствуют столбцам, указанным в примерах изображений. Также похоже, что запрос пытается использовать псевдоним столбца в предложении where (что невозможно в SQL-сервере).
В приведенном ниже примере я применил фильтрацию к таблице временных транзакций в общем выражении таблицы, а затем оставил присоединенную к ней пользовательскую таблицу. Это приводит к следующему выводу.
Вы видите, что для пользователей, чьи временные транзакции не соответствуют условию фильтрации, возвращается ноль, тогда как при использовании внутреннего объединения эти пользователи вообще не возвращаются.
Имея более полные примеры данных (которые представляют структуру столбцов и ожидаемый результат или что-то подобное), мы могли бы найти решение, которое было бы гораздо ближе к вырезанию и вставке, тогда как этот пример - просто пример того, как Я бы построил левое соединение, где фильтрация должна происходить в правой части соединения.
Удачи, если у вас есть какие-либо вопросы, дайте мне знать.
declare @users table (
userid int identity(1,1),
username nvarchar(50)
);
declare @timetransaction table (
timetransactionid int identity(1,1),
userid int,
quantityoftime int
);
insert @users
values
('SomeBody'),
('AnyBody'),
('SomeoneElse');
insert @timetransaction
values
(1, 7),
(1, 12),
(2, 5),
(3, 71),
(3, 4);
declare @userid int = 1;
with timetransaction as (select userid, quantityoftime from @timetransaction where userid=1)
select u.userid, coalesce(SUM(quantityoftime), 0) as total from @users u
left join timetransaction t on u.userid=t.userid
group by u.userid;
Пример таблицы пользователей
введите описание изображения здесь
Пример таблицы временных транзакций
введите описание изображения здесь