内容纲要
需要编写一个SQL语句满足:
- 当前工序设置部门时,按工序部门筛选
- 当前工序未设置部门时,按模板设置的工序部门筛选
主要用到函数有 FIND_IN_SET(str,strlist) 和 IF(expr1,expr2,expr3)SELECT cap.id as cap_id, ca.id,-- 铸件id ca.casting,-- 铸造号 ca.cast_code,-- 铸件条形码 ca.furnace,-- 炉号 ca.mater_id,-- 物料id ca.mater_name,-- 铸件名称 ca.drawing,-- 图号 ca.contract_detail_id,-- 合同明细id ca.emp_id,-- 计划员id cd.texture,-- 材质 cd.delivery_date,-- 交货日期 arg.arg_text AS delivery_type_name,-- 交货类型 ct.contract_id,-- 合同id ct.contract_no,-- 合同编号 ct.sign_date,-- 签订日期 cu.customer_name customer_name,-- 客户名称 cap.process_management_id,-- 铸件生产流程id emp1.true_name sales_name,-- 业务员 pt.code_name AS project_code_name,-- 项目类型 emp2.true_name craft_person_name,-- 工艺员 cap.id AS plan_id,-- 工序计划id cap.proc_id,-- 工序id cap.process_name,-- 工序名称 cap.plan_start_time,-- 计划开始时间 cap.plan_end_time,-- 计划结束时间 cap.proc_start_time,-- 领料开始时间 cap.proc_start_emp_id,-- 领料人员id cap.proc_end_time,-- 完工结束时间 cap.proc_end_emp_id,-- 完工人员id cap.
status
AS plan_status,-- 工序计划状态 0.已投产未加工; 1.加工; 2.完工; 3.回退; 4.作废 pp.record_type,-- 工序计划的记录类型 upnb.proc_unqualified_id,-- 不合格品单号 ppd.dept_id,-- 部门id(多个,隔开) cap.dept_id proc_dept_id,-- 工序班组 ca.status
-- 铸件状态: 0.已分配 1.待排产 2.已排产 FROM t_cast_assigned_proc cap JOIN t_cast_assigned ca ON cap.cast_id = ca.id JOIN t_contract_detail cd ON ca.contract_detail_id = cd.id LEFT JOIN t_arg arg ON arg.arg_group = 'process_require' AND arg.arg_code = cd.delivery_type LEFT JOIN t_contract ct ON ca.contract_id = ct.contract_id LEFT JOIN t_emp emp1 ON ct.sales = emp1.emp_id LEFT JOIN t_customer cu ON ct.customer_id = cu.customer_id LEFT JOIN t_contract_project_cate cpa ON cpa.contract_id = cd.contract_id AND cpa.mater_id = cd.mater_id LEFT JOIN t_emp emp2 ON cpa.craft_person = emp2.emp_id LEFT JOIN t_project_type pt ON pt.CODE = cpa.project_code_id LEFT JOIN t_process_proc pp ON pp.id = cap.proc_id LEFT JOIN t_process_proc_dept ppd ON ppd.proc_id = cap.proc_id LEFT JOIN t_unqualified_product_notice_bill upnb ON cap.id = upnb.proc_id WHERE ca.status
= 2 AND cap.status
= 2 AND IF(cap.dept_id is not NULL,cap.dept_id='54',FIND_IN_SET('54',ppd.dept_id)) -- AND FIND_IN_SET('54',ppd.dept_id) -- AND cap.dept_id='54' ORDER BY cap.id;