可以使用PIVOT表(使用SQL Server)完成此操作:
SELECt user_name, [dept1name], [dept2name], [dept3name], ...FROM (SELECt s.user_name, d.dept_name, case when sd.user_no is not null then 'X' else '' end as matches from staff s cross join department d left join staff_dept sd on s.user_no = sd.user_no and d.dept_no = sd.dept_no ) AS sPIVOT( min(matches) FOR dept_name IN ([dept1name], [dept2name], [dept3name], ...)) AS pvtorder by user_name
演示:http ://www.sqlfiddle.com/#!3/
c136d/5
- 编辑
- :要从表中的部门列表动态生成PIVOT查询,您将使用动态SQL,即,将代码生成为变量并使用
sp_executesql
帮助程序存储过程。这是一个示例:http - //www.sqlfiddle.com/#!3/c136d/14



