where 语句中 分情况设置条件

内容纲要

需要编写一个SQL语句满足:

  1. 当前工序设置部门时,按工序部门筛选
  2. 当前工序未设置部门时,按模板设置的工序部门筛选
    主要用到函数有 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;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注