一.数据库表格式
1.用户信息表
2.对应管理员矩阵
二.查询运行结果
//先查询特殊人员列,再按正常规则查找
select manage from groupInfo where other='张三'
union all
SELECT manage FROM groupInfo
WHERE EXISTS (select groupid, lv from userInfo
where (userInfo.name='张三' and groupInfo.groupid=userInfo.groupid and groupInfo.lv = userInfo.lv))
//将查找到的人员字段,转成xml,再用slq xml操作语句,按逗号分拆成多行,只有sql server才支持这样做
SELECT B.manage
FROM ( SELECT manage=CONVERT(XML , '<v>' + REPLACE(myInfo.manage , ',' , '</v><v>') + '</v>')
from (
select manage from groupInfo where other='张三'
union all
SELECT manage FROM groupInfo
WHERE EXISTS (select groupid, lv from userInfo
where (userInfo.name='张三' and groupInfo.groupid=userInfo.groupid and groupInfo.lv = userInfo.lv))
) as myInfo
) A
CROSS APPLY ( SELECT manage= N.v.value('.' , 'varchar(100)')
FROM A.manage.nodes('/v') N ( v )
) B
//先查询人员是否在特殊人员列,是的话直接返回对应上级领导,如果不在物殊人员列,照正情规则查找
select isnull(t1.manage1,t2.manage2) as '上级领导' from
(select manage as manage1 from groupInfo where other='张三') as t1
full join
(SELECT manage as manage2 FROM groupInfo
WHERE EXISTS (select id from userInfo
where (userInfo.name='张三' and groupInfo.groupid=userInfo.groupid and groupInfo.lv = userInfo.lv))) as t2
on 1=1