Mysql 多条件判断拼接字段数据
示例
先去重加上distinct
select distinct
job_function_code,job_sub_function_code,job_fam_function_code from ps_inf_job_code
order by job_function_code asc
去重结果
想获取从后到前的path关系 并且获取最后一级数据作为code ,利用case when then else end 语句构造,when里可以写判断条件,表达式 then后可以是固定值,可以是拼接值,可以是字段值,参考下面示例及结果展示
select distinct
'function'as cate_code0,
'main_function'as cate_code1,
(CASE
WHEN (job_sub_function_code != '' or job_sub_function_code != null)
and (job_fam_function_code = null or job_fam_function_code = '')THEN 'sub_function'
else '' END)as cate_code2,
(CASE
WHEN (job_fam_function_code != '' or job_fam_function_code != null)THEN 'fam_function'
else '' END)as cate_code3,
(CASE
WHEN (job_sub_function_code != '' or job_sub_function_code != null)
and (job_fam_function_code = null or job_fam_function_code = '')THEN CONCAT(job_function_code)
WHEN job_fam_function_code != null or job_fam_function_code != '' THEN concat(job_function_code,'>',job_sub_function_code)
END)as path,
(CASE
WHEN (job_function_code != '' or job_function_code != null)
and (job_sub_function_code = null or job_sub_function_code = '')
and (job_fam_function_code = null or job_fam_function_code = '')THEN job_function_code
WHEN (job_sub_function_code != '' or job_sub_function_code != null)
and (job_fam_function_code = null or job_fam_function_code = '')THEN job_sub_function_code
WHEN job_fam_function_code != null or job_fam_function_code != '' THEN job_fam_function_code
END)as code,
job_function_code,job_sub_function_code,job_fam_function_code
from ps_inf_job_code order by code asc