【发布时间】:2011-09-30 11:55:26
【问题描述】:
我有一个场景。这可以使用一个查询来完成吗?
表公司:单一公司信息,以 CPK 作为主键,并附有一个 Manager、Lead、HR
员工表:对于每家公司,都有员工(1 人或更多人最多可达 500 人)具有唯一的 empID 和附加的经理、主管、人力资源
-
表员工信息(用于使用 Web 应用程序):为他分配了 1 个或多个 Manager、Lead、HR(或可以是 ALL、ALL、ALL,这意味着他可以看到所有内容)
李>
所以:
Company
--------
CPK (PK)
Manager
Lead
HR
Employees
--------
empID (PK)
CPK (FK)
Manager
Lead
HR
EmployeesInfo
-------------
USER_ID (FK)
Manager
Lead
HR
Web --> 当用户登录时,他应该获取所有公司信息。如果他有权访问该公司或该公司内的任何员工,则启用该行,否则如果其为“全部”,则该行显示为灰色(禁用),然后他可以编辑每条记录
例如:
将 User1 分配给 Manager1、Lead1 和 HR1。
然后他可以编辑公司中经理 = Manager1、Lead = Lead1 和 HR = HR1 的所有记录。
还记录在具有 Company.CPK = Employee.CPK 和 Employee.Manager = Manager1 和 Employee.Lead = Lead1 和 Employee.HR = HR1 的员工的公司中
我的查询到现在但是
select t2.MANAGER from Employees t2 where t2.CPK = t1.CPK
返回多条记录,我应该怎么做???
SELECT t1.*,
--All condition
CASE WHEN (SELECT MANAGER FROM EmployeesInfo WHERE USER_ID=44) = 'All' then 1
ELSE(
--Check for Company
CASE
WHEN t1.MANAGER in (SELECT MANAGER FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN t1.LEAD in (SELECT LEAD FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN t1.HR in (SELECT HR FROM EmployeesInfo WHERE USER_ID=44) then 1
ELSE(
--Check Employee M,L,HR for that Company
CASE
WHEN (SELECT t2.MANAGER FROM Employees t2 WHERE t2.CPK = t1.CPK) in
(SELECT MANAGER FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN (SELECT t2.LEAD FROM Employees t2 WHERE t2.CPK = t1.CPK ) in
(SELECT LEAD FROM EmployeesInfo WHERE USER_ID=44) then 1
WHEN (SELECT t2.HR FROM Employees t2 WHERE t2.CPK = t1.CPK ) in
(SELECT HR FROM EmployeesInfo WHERE USER_ID=44) then 1
ELSE 0 END
)
END
)
END AS Grey_Out
FROM Company t1
WHERE t1.CPK ='1234'
最后我应该得到所有带有 gray_out 字段为 (1 或 0) 的公司,然后我将使用 Grey_Out 字段来查找是否应该使其可编辑。
【问题讨论】: