概念
在Org_Structure有部门和办事处的独特组合。在Emp_Positions表中,每个员工被分配到组织结构中的部门/办公室或“连锁”的特定组合。但有些员工不应该属于办公室,因此他们被分配到一个链,其中office_id列为NULL。 在第二张图片上,这名员工被涂成红色。
的错误
所提供的存储过程可以发现只有那些既dep_id和office_id是NOT NULL链的员工。如果在某些记录中,office_id为NULL,或者dep_id为NULL,则不会显示此记录。查看第二张图片,结果中不会显示红色的记录。一旦我用值替换NULL,它就会显示出来。如果我用NULL替换任何行的任何列,则整行不会显示。
我试图找到修复它的方法,但我无法弄清楚......在这里,伙计们已经帮助我使这个过程工作,我非常感谢这一点,但WHERE子句仍然越野车...
这是存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE FilterEmpList
@empName nvarchar(250) = null,
@empDepID int = null,
@empOfficeID int = null,
@empPosID int = null
AS
BEGIN
SELECT
E.emp_id,
E.emp_name,
P.pos_name,
D.dep_name,
O.office_name
FROM dbo.Org_Structure OS
JOIN dbo.Emp_Positions EP ON OS.chain_id=EP.chain_id
JOIN dbo.Employees E ON EP.emp_id=E.emp_id
JOIN dbo.Positions P ON P.pos_id=EP.pos_id
JOIN dbo.Departments D ON D.dep_id=OS.dep_id
LEFT JOIN dbo.Offices O ON O.office_id=OS.office_id
WHERE (E.emp_name LIKE '%'[email protected]+'%' OR @empName IS NULL)
AND OS.dep_id = ISNULL(@empDepID, OS.dep_id)
AND OS.office_id = ISNULL(@empOfficeID, OS.office_id)
AND EP.pos_id = ISNULL(@empPosID, EP.pos_id)
END
*与LEFT JOIN添加它仍然无法正常工作
公关OBLEM已决议
看评论
您有'JOIN dbo.Offices O ON O.office_id = OS.office_id'。当'OS.office_id'为'NULL'时,你预期会发生什么?尝试做一个'LEFT JOIN' –
是的,我知道办公室表没有id = NULL的办公室。但我不知道如何修改存储过程来显示这些记录。这就是我问的原因。 – SWA
尝试将该行更改为:'LEFT JOIN dbo.Offices O ON O.office_id = OS.office_id' –