部门为下图
其中orgCode有规律既下图所示
污水数据库表
create table sewage_outlet
(
id varchar(36) not null comment 'id',
org_code varchar(50) null comment '污染口所属部门orgCode',
sewage_type varchar(50) null comment '污水类型',
regions varchar(50) null comment '流域',
)
污水口的管理部门可以是省市区
需求是 根据当前登录人的部门看到 下属不同部门的统计数据
比如我是全国管理员看到的统计数据是显示山东、河北的
比如我是山东管理员看到的统计数据是显示管济南、青岛、临沂的
比如我是临沂管理员看到的统计数据是显示兰山区、河东区、费县的
那我是全国管理员时 只显示省一级统计概况 山东的统计数据自然包含济南、青岛、临沂,临沂中又包含兰山区、河东区、费县,这时候不能确定传入到底是哪一级的就可用下面sql
利用传入的orgCode向右模糊查询到本级及其下级的部门再除去本级部门只获取所有下级部门,再通过length(#{orgCode}) + 3 ) 作用 不管下级是下一级还是下两级下三级只截取成下一级的格式,最后进行分部门统计
SELECT count(*),sd.depart_name FROM
(
SELECT *,
SUBSTRING(org_code, 1, length(#{orgCode}) + 3 ) org_code_temp
FROM sewage_outlet
WHERE org_code LIKE concat(#{orgCode},'%')
and org_code != #{orgCode}
) rs
LEFT JOIN sys_depart sd ON sd.org_code = rs.org_code_temp
GROUP BY sd.org_code, sd.depart_name;