У меня такой вид структуры в моей базе. Мне нужно создать список имен сотрудников, за которыми следуют имена их отделов и офисов. К настоящему времени я пришел на этот запрос:SQL-запрос в запросе
ALTER PROCEDURE FilterEmpList
@empName nvarchar(250) = null,
@empDepID int = null,
@empOfficeID int = null,
@empPosID int = null
AS
BEGIN
SELECT
E.emp_id AS 'emp_id',
E.emp_name AS 'emp_name',
(SELECT pos_name FROM Positions WHERE pos_id=EP.pos_id) AS 'pos_name',
(SELECT dep_name FROM Departments WHERE dep_id=OS.dep_id) AS 'dep_name',
(SELECT office_name FROM Offices WHERE office_id=OS.office_id) AS 'office_name'
FROM
Org_Structure OS INNER JOIN (Emp_Positions EP INNER JOIN Employees E ON EP.emp_id=E.emp_id) ON OS.chain_id=EP.chain_id
WHERE
(E.emp_name LIKE '%'[email protected]+'%' OR @empName IS NULL)
AND
(OS.dep_id = @empDepID OR @empDepID IS NULL)
AND
(OS.office_id = @empOfficeID OR @empOfficeID IS NULL)
AND
(EP.pos_id = @empPosID OR @empPosID IS NULL)
END
Когда я исполняю его таким образом Exec FilterEmpList, возникает ошибка: Недопустимый объект имя «EP».
Это очень сложно для меня, этот вопрос мой максимум и взял меня целый день ... Помогите мне с предложениями, пожалуйста.
Следующий выпуск
Теперь у меня есть еще одна проблема с этим запросом. Если office_id или dep_id в Org_Structure равен NULL, он не возвращает эту запись вообще. Что-то не так с предложением WHERE.
Решение этой проблемы с WHERE пункт находится в этом другом моей теме: WHERE clause - record with a NULL column is not displayed
Спасибо всем. Проблема была решена
Спасибо, я попробую это через час и отправлю отзыв. – SWA
Хорошо, я только что попробовал отредактированный пример и, похоже, работает). Я попробую с реальными данными за несколько минут. – SWA
Проблема с ** ГДЕ **. Если одно из полей в ** ОС ** является NULL (например, для некоторых сотрудников ** office_id = NULL **, потому что они принадлежат всему отделу), сотрудник не будет отображаться в результатах поиска ... – SWA