sql自己组装表mybaties

本文介绍了一个复杂的MyBatis映射文件配置,详细展示了如何使用动态SQL实现分页查询和多条件筛选,包括日期范围、字符串匹配等。通过嵌套的SQL片段和参数传递,实现了对大量数据的有效管理和高效检索。
部署运行你感兴趣的模型镜像

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "../spring/mybatis-3-mapper.dtd">

<mapper namespace="com.haier.openplatform.jsjksh.dao.ReportManageDao">
    <!-- mysql 分页头 -->
    <sql id="pagination_Head" >
        <![CDATA[]]>
    </sql>
    <!-- mysql 分页尾 -->
    <sql id="pagination_Tail">
        <![CDATA[limit #{pageNo}, #{pageSize}]]>
    </sql>


    <sql id="query_condition_sql">

        <if test="fhjd!= null and fhjd!=''">
            and b.FHJD like CONCAT('%',#{fhjd},'%')
        </if>
        <if test="tdlnr!= null and tdlnr!=''">
            and b.TDLNR like CONCAT('%',#{tdlnr},'%')
        </if>
        <if test="beginDate!= null and beginDate!=''">
            and b.ERDAT >= STR_TO_DATE(#{beginDate},'%Y-%m-%d %H:%i:%s')
        </if>
        <if test="endDate!= null and endDate!=''">
            <![CDATA[and b.ERDAT < STR_TO_DATE(#{endDate},'%Y-%m-%d %H:%i:%s')]]>
        </if>

    </sql>


    <sql id="query_condition_sql_2">
        <if test="fhjd !=null and fhjd != ''">
            AND A.FHJD = #{fhjd}
        </if>
        <if test="tdlnr !=null and tdlnr != ''">
            AND A.TDLNR = #{tdlnr}
        </if>
        <if test="erdat !=null and erdat != ''">
            AND A.ERDAT >= STR_TO_DATE(#{erdat},'%Y-%m-%d %H:%i:%s')
        </if>
        <if test="erdat1 !=null and erdat1 != ''">
            <![CDATA[AND A.ERDAT < STR_TO_DATE(#{erdat1},'%Y-%m-%d %H:%i:%s')]]>
        </if>
    </sql>

    <select id="getYdDjPjList" parameterType="map" resultType="com.haier.openplatform.jsjksh.model.RptYdDjPjBean">
        SELECT FHJD,TDLNR,NAME1,totalCount,IFNULL(noArrivedCount,0)as noArrivedCount,allDoneCount,partDoneCount,djCount,wdjCount,djRadio,veryGood,good,notGood,noPj,IFNULL(goodRadio,'0%')as goodRadio
        from
        (select table_djl_and_radio.FHJD,table_djl_and_radio.TDLNR,table_djl_and_radio.NAME1,totalCount,noArrivedCount,IFNULL(allDoneCount,0)as allDoneCount,IFNULL(partDoneCount,0)as partDoneCount,
        IFNULL(djCount,0)as djCount,IFNULL(wdjCount,0)as wdjCount,IFNULL(djRadio,'0%')as djRadio,IFNULL(veryGood,0)as veryGood,IFNULL(good,0)as good,
        IFNULL(notGood,0)as notGood,IFNULL(noPj,0)as noPj,concat(truncate((veryGood+good)/(veryGood+good+notGood)* 100,0),'%')goodRadio
        from
        (select table_djCount.FHJD,table_djCount.TDLNR,table_djCount.NAME1, totalCount,noArrivedCount,allDoneCount,partDoneCount,

        djCount,wdjCount,concat(truncate(djCount/totalCount* 100,0),'%')djRadio

        from
        (select table2.FHJD,table2.TDLNR,table2.NAME1,totalCount,noArrivedCount,allDoneCount,partDoneCount
        from (
        select table1.FHJD,table1.TDLNR,table1.NAME1, totalCount,noArrivedCount,allDoneCount
        from (
        (select total_djl_table.FHJD,total_djl_table.TDLNR,total_djl_table.NAME1, total_djl_table.totalCount,no_arrived_table.noArrivedCount
        from
        (select b.FHJD, b.TDLNR ,c.NAME1, sum(a.KWMENG) totalCount from in_ydmx a , in_ydgl b,in_cysgl c
        <where>
            a.tknum = b.tknum and b.TDLNR = c.TDLNR AND b.FHJD = c.FHJD and b.ADD1 != '0' AND c.ISAVAILABLE != '0'

            <include refid="query_condition_sql"/>

        </where>

        GROUP BY b.FHJD, b.TDLNR) total_djl_table

        left JOIN

        (select b.FHJD, b.TDLNR,sum(a.KWMENG) noArrivedCount from in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'
            and (b.ydzt in('0','1','2')  OR b.ydzt IS NULL)

            <include refid="query_condition_sql"/>

        </where>

        GROUP BY b.FHJD, b.TDLNR) no_arrived_table on total_djl_table.FHJD = no_arrived_table.FHJD
        and total_djl_table.TDLNR = no_arrived_table.TDLNR) table1

        left JOIN

        (select b.FHJD, b.TDLNR ,sum(a.KWMENG) allDoneCount from in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'
            and b.ydzt = '3'

            <include refid="query_condition_sql"/>

        </where>
        GROUP BY b.FHJD, b.TDLNR) all_done_table on table1.FHJD = all_done_table.FHJD
        and table1.TDLNR = all_done_table.TDLNR)) table2

        left JOIN

        (select b.FHJD, b.TDLNR,sum(a.KWMENG) partDoneCount from in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'
            and b.ydzt = '4'

            <include refid="query_condition_sql"/>
        </where>

        GROUP BY b.FHJD, b.TDLNR) part_done_table on table2.FHJD = part_done_table.FHJD
        and table2.TDLNR = part_done_table.TDLNR) table_djCount

        LEFT JOIN

        (SELECT table10.FHJD,table10.TDLNR,IFNULL(table10.djCount,0) as djCount ,IFNULL(table11.wdjCount,0) as wdjCount,case when IFNULL(table10.djCount,0)+IFNULL(table11.wdjCount,0) > 0 then
        concat(truncate(IFNULL(table10.djCount,0)/(IFNULL(table10.djCount,0)+IFNULL(table11.wdjCount,0))* 100,0),'%')
        else '0%' end djRadio
        FROM
        (SELECT b.FHJD, b.TDLNR ,sum(a.KWMENG) djCount FROM in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'

            <![CDATA[
            AND HOUR(TIMEDIFF((str_to_date(b.add3, '%Y-%m-%d %H')),DATE_ADD(STR_TO_DATE(b.erdat,'%Y-%m-%d %H'),INTERVAL 36 HOUR))) /24 <=  #{cycleNum}
       ]]>

            <include refid="query_condition_sql"/>
        </where>

        GROUP BY b.FHJD, b.TDLNR) table10
        LEFT JOIN
        (SELECT b.FHJD, b.TDLNR, sum(a.KWMENG) wdjCount FROM in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'

            AND HOUR(TIMEDIFF((str_to_date(b.add3, '%Y-%m-%d %H')),DATE_ADD(STR_TO_DATE(b.erdat,'%Y-%m-%d %H'),INTERVAL 36 HOUR))) /24 >  #{cycleNum}

            <include refid="query_condition_sql"/>

        </where>

        GROUP BY b.FHJD, b.TDLNR) table11 ON table10.FHJD = table11.FHJD AND table10.TDLNR = table11.TDLNR) table_djRadio

        on table_djCount.FHJD = table_djRadio.FHJD
        and table_djCount.TDLNR = table_djRadio.TDLNR) table_djl_and_radio

        LEFT JOIN

        (select aa.FHJD,aa.TDLNR,
        MAX(CASE aa.KHPJ WHEN '1' THEN totalCount ELSE 0 END ) veryGood,
        MAX(CASE aa.KHPJ WHEN '2' THEN totalCount ELSE 0 END ) good,
        MAX(CASE aa.KHPJ WHEN '3' THEN totalCount ELSE 0 END ) notGood,
        MAX(CASE aa.KHPJ WHEN '签收未评价' THEN totalCount ELSE 0 END ) noPj,
        concat(truncate((MAX(CASE aa.KHPJ WHEN '1' THEN totalCount ELSE 0 END ) +
        MAX(CASE aa.KHPJ WHEN '2' THEN totalCount ELSE 0 END ))/
        (MAX(CASE aa.KHPJ WHEN '3' THEN totalCount ELSE 0 END ) +
        MAX(CASE aa.KHPJ WHEN '2' THEN totalCount ELSE 0 END) + MAX(CASE aa.KHPJ WHEN '3' THEN totalCount ELSE 0 END)) * 100,0),'%') as goodRadio
        from (select stt.FHJD,stt.TDLNR,stt.KHPJ,count(1) totalCount
        from (select b.ROW_ID,b.FHJD, b.TDLNR,(case when b.KHPJ IN ('1','2','3') THEN
        b.KHPJ  else '签收未评价' end) KHPJ from in_ydgl b
        <where> b.YDZT = 3 and b.ADD1 != '0'

            <include refid="query_condition_sql"/>

        </where>
        ) stt
        GROUP BY stt.FHJD,stt.TDLNR,stt.KHPJ) aa
        group by aa.FHJD, aa.TDLNR) table_pj
        on table_djl_and_radio.FHJD = table_pj.FHJD AND table_djl_and_radio.TDLNR = table_pj.TDLNR) as first_table
        <include refid="pagination_Tail"/>
    </select>

    <select id="getYdDjPjTotalCount" parameterType="map" resultType="java.lang.Long">
        select count(1)
        from
        (select table_djCount.FHJD,table_djCount.TDLNR,table_djCount.NAME1, totalCount,noArrivedCount,allDoneCount,partDoneCount,

        djCount,wdjCount,djRadio

        from
        (select table2.FHJD,table2.TDLNR,table2.NAME1,totalCount,noArrivedCount,allDoneCount,partDoneCount
        from (
        select table1.FHJD,table1.TDLNR,table1.NAME1, totalCount,noArrivedCount,allDoneCount
        from (
        (select total_djl_table.FHJD,total_djl_table.TDLNR,total_djl_table.NAME1, total_djl_table.totalCount,no_arrived_table.noArrivedCount
        from
        (select b.FHJD, b.TDLNR ,c.NAME1, sum(a.KWMENG) totalCount from in_ydmx a , in_ydgl b,in_cysgl c
        <where> a.tknum = b.tknum and b.TDLNR = c.TDLNR AND b.FHJD = c.FHJD and b.ADD1 != '0'AND c.ISAVAILABLE != '0'

            <include refid="query_condition_sql"/>

        </where>
        GROUP BY b.FHJD, b.TDLNR) total_djl_table

        left JOIN

        (select b.FHJD, b.TDLNR,sum(a.KWMENG) noArrivedCount from in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'
            and (b.ydzt in('0','1','2')  OR b.ydzt IS NULL)

            <include refid="query_condition_sql"/>

        </where>
        GROUP BY b.FHJD, b.TDLNR) no_arrived_table on total_djl_table.FHJD = no_arrived_table.FHJD
        and total_djl_table.TDLNR = no_arrived_table.TDLNR) table1

        left JOIN

        (select b.FHJD, b.TDLNR ,sum(a.KWMENG) allDoneCount from in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'
            and b.ydzt = '3'

            <include refid="query_condition_sql"/>

        </where>

        GROUP BY b.FHJD, b.TDLNR) all_done_table on table1.FHJD = all_done_table.FHJD
        and table1.TDLNR = all_done_table.TDLNR)) table2

        left JOIN

        (select b.FHJD, b.TDLNR,sum(a.KWMENG) partDoneCount from in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'
            and b.ydzt = '4'

            <include refid="query_condition_sql"/>

        </where>
        GROUP BY b.FHJD, b.TDLNR) part_done_table on table2.FHJD = part_done_table.FHJD
        and table2.TDLNR = part_done_table.TDLNR) table_djCount

        LEFT JOIN

        (SELECT table10.FHJD,table10.TDLNR,table10.djCount,table11.wdjCount,concat(truncate(table10.djCount/(table10.djCount+table11.wdjCount)* 100,0),'%') djRadio
        FROM
        (SELECT b.FHJD, b.TDLNR ,sum(a.KWMENG) djCount FROM in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'

            <![CDATA[
            AND HOUR(TIMEDIFF((str_to_date(b.add3, '%Y-%m-%d %H')),DATE_ADD(STR_TO_DATE(b.erdat,'%Y-%m-%d %H'),INTERVAL 36 HOUR))) /24 <=  #{cycleNum}
        ]]>

            <include refid="query_condition_sql"/>

        </where>
        GROUP BY b.FHJD, b.TDLNR) table10
        LEFT JOIN
        (SELECT b.FHJD, b.TDLNR, sum(a.KWMENG) wdjCount FROM in_ydmx a , in_ydgl b
        <where> a.tknum = b.tknum and b.ADD1 != '0'

            AND HOUR(TIMEDIFF((str_to_date(b.add3, '%Y-%m-%d %H')),DATE_ADD(STR_TO_DATE(b.erdat,'%Y-%m-%d %H'),INTERVAL 36 HOUR))) /24 >  #{cycleNum}

            <include refid="query_condition_sql"/>

        </where>

        GROUP BY b.FHJD, b.TDLNR) table11 ON table10.FHJD = table11.FHJD AND table10.TDLNR = table11.TDLNR) table_djRadio

        on table_djCount.FHJD = table_djRadio.FHJD
        and table_djCount.TDLNR = table_djRadio.TDLNR) table_djl_and_radio

        LEFT JOIN

        (select aa.FHJD,aa.TDLNR,
        MAX(CASE aa.KHPJ WHEN '1' THEN totalCount ELSE 0 END ) veryGood,
        MAX(CASE aa.KHPJ WHEN '2' THEN totalCount ELSE 0 END ) good,
        MAX(CASE aa.KHPJ WHEN '3' THEN totalCount ELSE 0 END ) notGood,
        MAX(CASE aa.KHPJ WHEN '签收未评价' THEN totalCount ELSE 0 END ) noPj,
        concat(truncate((MAX(CASE aa.KHPJ WHEN '1' THEN totalCount ELSE 0 END ) +
        MAX(CASE aa.KHPJ WHEN '2' THEN totalCount ELSE 0 END ))/
        (MAX(CASE aa.KHPJ WHEN '3' THEN totalCount ELSE 0 END ) +
        MAX(CASE aa.KHPJ WHEN '2' THEN totalCount ELSE 0 END) + MAX(CASE aa.KHPJ WHEN '3' THEN totalCount ELSE 0 END)) * 100,0),'%') as goodRadio
        from (select stt.FHJD,stt.TDLNR,stt.KHPJ,count(1) totalCount
        from (select b.ROW_ID,b.FHJD, b.TDLNR,(case when b.KHPJ IN ('1','2','3') THEN
        b.KHPJ  else '签收未评价' end) KHPJ from in_ydgl b
        <where> b.YDZT = 3 and b.ADD1 != '0'

            <include refid="query_condition_sql"/>

        </where>
        ) stt
        GROUP BY stt.FHJD,stt.TDLNR,stt.KHPJ) aa
        group by aa.FHJD, aa.TDLNR) table_pj
        on table_djl_and_radio.FHJD = table_pj.FHJD AND table_djl_and_radio.TDLNR = table_pj.TDLNR
    </select>

    <select id="getCysCollectTypeRpt" parameterType="map" resultType="com.haier.openplatform.jsjksh.model.CysCollectTypeRpt">
        select tb3.TDLNR,CONCAT(tb3.FHJD ,'-', tb3.NAME1) AS name1 ,

        ROUND((IFNULL(tb3.sysCount,0)/IFNULL(tb3.allCount,1))*100,2) as sysCountRadio,
        ROUND((IFNULL(tb3.appCount,0)/IFNULL(tb3.allCount,1))*100,2) as appCountRadio,
        ROUND((IFNULL(tb3.webCount,0)/IFNULL(tb3.allCount,1))*100,2) as webCountRadio,
        ROUND((IFNULL(( IFNULL(tb3.allCount,0)-
        IFNULL(tb3.sysCount,0)-
        IFNULL(tb3.appCount,0)-
        IFNULL(tb3.webCount,0)-IFNULL(no_node.noNodeCount,0)),0)/IFNULL(tb3.allCount,1))*100,2) as mixCountRadio,
        ROUND((IFNULL(no_node.noNodeCount,0)/IFNULL(tb3.allCount,1))*100,2) as noNodeCountRadio,
        IFNULL(tb3.allCount,0) as allCount,
        IFNULL(tb3.sysCount,0) as sysCount,
        IFNULL(tb3.appCount,0) as appCount,
        IFNULL(tb3.webCount,0) as webCount,

        IFNULL(( IFNULL(tb3.allCount,0)-
        IFNULL(tb3.sysCount,0)-
        IFNULL(tb3.appCount,0)-
        IFNULL(tb3.webCount,0)-IFNULL(no_node.noNodeCount,0)),0) mixCount,
        IFNULL(no_node.noNodeCount,0) noNodeCount FROM

        (select tb2.FHJD,tb2.TDLNR,tb2.NAME1,tb2.allCount,tb2.sysCount,tb2.appCount,web_tb.webCount FROM (
        (select tb1.FHJD,tb1.TDLNR,tb1.NAME1,tb1.allCount, tb1.sysCount,app_tb.appCount from

        (select base_t.FHJD,base_t.TDLNR,base_t.NAME1,sys_table.sysCount, base_t.allCount from (select DISTINCT A.FHJD, s.TDLNR,s.NAME1, count(1) allCount
        from  in_cysgl s,in_ydgl A
        <where> A.TDLNR = s.TDLNR
            and A.tdlnr != 'LB001001'
            and A.ADD1 = '1'
            AND s.ISAVAILABLE='1'

            <include refid="query_condition_sql_2"/>

        </where>

        GROUP BY A.FHJD,A.TDLNR,s.NAME1) base_t

        LEFT JOIN

        (SELECT AA.FHJD,AA.TDLNR, COUNT(DISTINCT TKNUM) sysCount FROM (
        SELECT
        DISTINCT A.FHJD,A.TKNUM,A.TDLNR
        FROM
        in_ydgl A, in_wlxq B
        <where> A.TKNUM = B.TKNUM
            and B.CYSBJ in  ('KT', 'YHX', 'HL', 'XYT')
            AND A.tdlnr != 'LB001001'
            and A.ADD1 = '1'

            <include refid="query_condition_sql_2"/>

            and A.YDZT IS  NOT NULL
            AND NOT EXISTS (SELECT 1 FROM in_wlxq T
            WHERE T.CYSBJ != B.CYSBJ
            AND T.FLAG IS NULL
            AND T.CYSBJ IS NOT NULL
            AND T.TKNUM = A.TKNUM)
            and EXISTS (SELECT 1 FROM in_wlxq T
            WHERE T.ADD2 in ('1','2')
            AND T.FLAG IS NULL
            AND T.TKNUM = A.TKNUM)) AA
            GROUP BY AA.FHJD,AA.TDLNR
        </where>) sys_table
        on base_t.FHJD = sys_table.FHJD AND base_t.TDLNR = sys_table.TDLNR ) tb1

        LEFT JOIN

        (SELECT AA.FHJD,AA.TDLNR,  COUNT(DISTINCT AA.TKNUM) appCount FROM (
        SELECT
        DISTINCT A.FHJD,A.TKNUM,A.TDLNR
        FROM
        in_ydgl A, in_wlxq B
        <where>  A.TKNUM = B.TKNUM
            and B.CYSBJ = 'APP'
            AND A.tdlnr != 'LB001001'
            and A.ADD1 = '1'

            <include refid="query_condition_sql_2"/>

            and A.YDZT IS  NOT NULL
            AND NOT EXISTS (SELECT 1 FROM in_wlxq T
            WHERE T.CYSBJ != B.CYSBJ
            AND T.FLAG IS NULL
            AND T.CYSBJ IS NOT NULL
            AND T.TKNUM = A.TKNUM)
            and EXISTS (SELECT 1 FROM in_wlxq T
            WHERE T.ADD2 in ('1','2')
            AND T.FLAG IS NULL
            AND T.TKNUM = A.TKNUM)) AA
            GROUP BY AA.FHJD,AA.TDLNR
        </where>) app_tb
        on tb1.FHJD = app_tb.FHJD and tb1.tdlnr = app_tb.tdlnr) tb2

        LEFT JOIN

        (SELECT AA.FHJD,AA.TDLNR, COUNT(DISTINCT TKNUM) webCount FROM (
        SELECT
        DISTINCT A.FHJD,A.TKNUM,A.TDLNR
        FROM
        in_ydgl A, in_wlxq B
        <where> A.TKNUM = B.TKNUM
            and B.CYSBJ = 'WEB'
            AND A.tdlnr != 'LB001001'
            and A.add1 = '1'

            <include refid="query_condition_sql_2"/>


            and A.YDZT IS  NOT NULL
            AND NOT EXISTS (SELECT 1 FROM in_wlxq T
            WHERE T.CYSBJ != B.CYSBJ
            AND T.FLAG IS NULL
            AND T.CYSBJ IS NOT NULL
            AND T.TKNUM = A.TKNUM)
            and EXISTS (SELECT 1 FROM in_wlxq T
            WHERE T.ADD2 in ('1','2')
            AND T.FLAG IS NULL
            AND T.TKNUM = A.TKNUM)
        </where>) AA
        GROUP BY AA.FHJD,AA.TDLNR) web_tb
        on tb2.FHJD = web_tb.FHJD  and  tb2.TDLNR = web_tb.TDLNR )) tb3

        LEFT JOIN

        (SELECT AA.FHJD,AA.TDLNR,  COUNT(DISTINCT TKNUM) noNodeCount FROM
        (SELECT
        DISTINCT A.FHJD,A.TKNUM,A.TDLNR
        FROM
        in_ydgl A
        <where> A.tdlnr != 'LB001001'
            and A.add1 = '1'

            <include refid="query_condition_sql_2"/>

            AND not EXISTS (SELECT 1 FROM in_wlxq T
            WHERE T.ADD2 in ('1','2')
            AND T.FLAG IS NULL
            AND T.TKNUM = A.TKNUM
        </where>)) AA
        GROUP BY AA.FHJD, AA.TDLNR) no_node
        on tb3.FHJD = no_node.FHJD  and tb3.TDLNR = no_node.TDLNR
    </select>


</mapper>
 

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^止境^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值