mybatis动态having

需求:统计数据时要根据前端传的人员name,班次查询人员信息

  • 动态拼接having条件 【因为我这个字段不分组之前也可以过滤,所以说可以写在where里面,也可以分组之后再次过滤】
  • 直接使用mybatis的<trim>标签就可以实现这个需求
SELECT
            substring_index( substring_index( u.zj_user_person_id, ',', b.help_topic_id + 1 ), ',', - 1 ) userId,
            substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ) userCount,
            substring_index( substring_index( u.zj_user_person_time, ',', b.help_topic_id + 1 ), ',', - 1 ) statisticsTime,
            substring_index( substring_index( u.zj_user_person_classes, ',', b.help_topic_id + 1 ), ',', - 1 ) classes,
            substring_index( substring_index( u.zj_user_person_name, ',', b.help_topic_id + 1 ), ',', - 1 ) userName,
            substring_index( substring_index( u.zj_user_person_dept_name, ',', b.help_topic_id + 1 ), ',', - 1 ) deptName,
            SUM( CASE WHEN u.zj_user_worker_type = 45 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) zjLength,
            SUM( CASE WHEN u.zj_user_worker_type = 35 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) zjNumbers,
            SUM( CASE WHEN u.zj_user_worker_type = 40 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) changeVariety,
            SUM( CASE WHEN u.zj_user_worker_type = 34 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) twistedSilk,
            SUM( CASE WHEN u.zj_user_worker_type = 29 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) head,
            SUM( CASE WHEN u.zj_user_worker_type = 33 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) overKnot,
            SUM( CASE WHEN u.zj_user_worker_type = 42 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) changeSy,
            SUM( CASE WHEN u.zj_user_worker_type = 43 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) upShaft,
            SUM( CASE WHEN u.zj_user_worker_type = 47 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) rawSilkPerm,
            SUM( CASE WHEN u.zj_user_worker_type = 38 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) pickS,
            SUM( CASE WHEN u.zj_user_worker_type = 27 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) dismantleShaftLength,
            SUM( CASE WHEN u.zj_user_worker_type = 32 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) reduceHead,
            SUM( CASE WHEN u.zj_user_worker_type = 31 THEN  IFNULL(substring_index( substring_index( u.zj_user_person_count, ',', b.help_topic_id + 1 ), ',', - 1 ),0)  ELSE 0 END ) plusHead,
            u.zj_user_material_batch_no materialBatchNo,
            u.zj_user_material_name materialName,
            CONCAT( u.zj_user_material_name,' 	', u.zj_user_material_batch_no ) AS materialNameAndBatchNo
    FROM
            busi_zj_user u
    LEFT JOIN help_topic b ON b.help_topic_id &lt; ( LENGTH( u.zj_user_person_id ) - LENGTH( REPLACE ( u.zj_user_person_id, ',', '' ) ) + 1 )
    WHERE
            u.is_delete = 0
            AND u.zj_user_org_id = #{cropOrgId}
            AND u.zj_user_worker_type NOT IN ( 25, 26, 27 )
            <if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
                    AND date_format(u.zj_user_start_time,'%Y-%m-%d') &gt;= date_format(#{beginTime},'%Y-%m-%d')
            </if>
            <if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
                    AND date_format(u.zj_user_start_time,'%Y-%m-%d') &lt;= date_format(#{endTime},'%Y-%m-%d')
            </if>
    GROUP BY
            deptName,
            userId,
            date_format( statisticsTime, '%Y-%m-%d' ),
            materialBatchNo,
            materialName
        <trim prefix="HAVING"  prefixOverrides="AND">
            <if test="userName !=null and userName !='' ">
                AND userName LIKE CONCAT('%',#{userName},'%')
             </if>
            <if test="classes !=null and classes !='' ">
                AND classes LIKE CONCAT('%',#{classes},'%')
             </if>
        </trim>
    ORDER BY
            statisticsTime DESC,
            userId DESC
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值