我有一张代表员工的表格。我有第二个表代表各种员工资料,例如员工、团队负责人、经理、行政人员等。我有第三个表格,将员工映射到多对多关系中的个人资料,即员工可以同时属于“员工的个人资料和“经理”的个人资料。
我如何才能获得在我的第一列中显示每个员工的回报,然后在随后的列中表示每个配置文件,并以是 - 否(或类似)表示该员工是否属于每个特定配置文件?
我有一张代表员工的表格。我有第二个表代表各种员工资料,例如员工、团队负责人、经理、行政人员等。我有第三个表格,将员工映射到多对多关系中的个人资料,即员工可以同时属于“员工的个人资料和“经理”的个人资料。
我如何才能获得在我的第一列中显示每个员工的回报,然后在随后的列中表示每个配置文件,并以是 - 否(或类似)表示该员工是否属于每个特定配置文件?
您可以使用连接和聚合来做到这一点:
select e.employee_id,
max(case when p.profile_name = 'Employee' then 1 else 0 end) as Employee,
max(case when p.profile_name = 'Manager' then 1 else 0 end) as Manager,
. . .
from employees e left outer join
employee_profile ep
e.employee_id = ep.employee_id left outer join
profile p
on ep.profile_id = p.profile_id
group by e.employee_id;
数据结构本身似乎很合理。
我认为重新设计以删除您拥有的多对多是值得的。
如果他们有匹配的主键/外键,你可以
Select * from Table1, Table2 Where Table1ID = Table2ID