У меня есть запрос, который возвращает список магазинов, к которым пользователь имеет доступ. Howerver, если пользователь является внутренним сотрудником, у них автоматически есть доступ ко всем магазинам.SQL Server 2008R2 Where Clause для слияния двух запросов
В штатном расписании это обозначается coloumn под названием Internal, который представлен 1 для внутреннего персонала и 0 для не внутреннего персонала.
В настоящее время существует сохраненная процедура, которая получает список магазинов для пользователя, в котором передается идентификатор пользователя. Сохраненная процедура похожа на приведенную ниже. Поэтому я хочу выяснить, как присоединиться к запросу в один.
DECLARE @IsInternal bit
SELECT @IsInternal = Staff.Internal FROM Staff WHERE Staff.StaffId = @userId
IF(@IsInternal = 0)
BEGIN
SELECT DISTINCT Store.Id, Store.Name,
FROM
Store JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff ON StaffAccess.StaffId= Staff.StaffId
WHERE
StaffAccess.StaffID = @userId
ORDER BY
Store.Name
END
ELSE
BEGIN
SELECT DISTINCT Store.Id,Store.Name,
FROM Store
ORDER BY Store.Name
END
Извините, что я должен был включить стол для персонала. Если я запускаю ниже это возвращает все магазины для пользователя, который не является внутренний персонал
SELECT DISTINCT
Store.Id,
Store.Name,
FROM
Store
JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff on Staff.Internal= 1 OR (StaffAccess.StaffID = @userId AND StaffAccess.StaffId = Staff.StaffId)
ORDER BY
Store.Name
Можете ли вы прочитайте свой собственный код с этим путаным отступом? Мне трудно даже увидеть, где начинаются и заканчиваются заявления. – usr
Улучшен ответ с помощью рабочего примера - http://www.sqlfiddle.com/#!3/aafa5/16/0 –