У меня есть таблица событий, в которой есть поле автора и поле ведущего. Человек из таблицы моего лица может быть как автором, так и ведущим одного и того же мероприятия, или они могут быть либо ведущими, либо автором. Мне нужно применить фильтры к набору результатов на основе их идентификатора лица и выбранного им типа или фильтра. У меня есть фильтры:SQL Select Statement Где
Все: Это возвращает любые записи, в которых они являются либо автором, либо ведущим.
AllPresenter: все записи в качестве докладчика.
AllAuthor: все записи как автор.
PresenterOnly: только записи как ведущие, а не автор.
AuthorOnly: только записи как автор, а не ведущий.
PresenterAndAuthorOnly: все записи, в которых они являются ведущим и автором.
В настоящее время у меня есть сохраненный proc, который использует внешние ifs, как показано ниже, и я попытался найти способ объединить все эти похожие операторы select в один. Мне не повезло найти лучшее решение, и мне интересно, не хватает ли я техники.
If (@filter = 'PandAOnly' or @filter = 'AllP' or @filter = 'AllA')
begin
Select * from Event
Where
PresenterId = Case @personId is null then PresenterId else @personId end
and
AuthorId = Case @personId is null then AuthorId else @personId end
end
else if (@filter = 'All')
begin
Select * from Event
Where
PresenterId = @personId
Or
AuthorId = @personId
end
else if (@fitler = 'POnly')
begin
Select * from Event
Where
PresenterId = @personId
and
AuthorId <> @personId
end
else
begin
Select * from Event
Where
AuthorId = @personId
and
PresenterId <> @personId
end