mysql使用case when执行结果做条件查询

本文介绍如何使用MySql的CaseWhen语句进行报表字段的条件搜索查询,通过嵌套查询实现对巡检类型等字段的动态筛选,提供前端查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql case when

有这个任务,对报表做某个字段的条件搜索查询,这个查询字段是由报表其中一个字段case when 获得。将结果添加至报表,并添加查询功能。
如下:下拉框“巡检类型”就是根据报表中巡检次数case when 获取到,然后查询符合的数据。
在这里插入图片描述
上代码

<select id="selectList" resultMap="StageAcceptanceResultMap">
                select * from(
                select
                t3.id,
                case
                when t3.type = 'SX' then
                '水电阶段'
                when t3.type = 'PX' then
                '批灰阶段'
                END as type,
                t3.systemstage,t3.nowstage,t3.saturatestaffs,t3.check_item,
                case
                when t3.qualitypass = 1 then
                '合格'
                when t3.qualitypass = 2 then
                '不合格'
                end as qualitypass,
                case
                when t3.checknumber &lt;=1 then
                '首次巡检'
                when t3.checknumber &gt;1 then
                '整改巡检'
                end as checktype,
                t3.unitname,t3.checkdate,t3.checkgroup,t3.checkuser,t3.checknumber, t3.suggest,
                t4.xmjldonation,t4.xmzgdonation,t4.pqjldonation,t4.process_point,t3.xmjl,t3.xmzg,t3.projaddr
            from  (
                SELECT
                t1.*,t2.`code`,	t2.type ty ,t2.check_item,
                p1.xmzg,p1.xmjl,p1.projaddr,p2.name as unitname
                FROM
                	tbl_satge_check_quality t1
	                LEFT JOIN tbl_quality_notconform_item t2 ON t1.id = t2.stagecheckid
	                LEFT JOIN tbl_dispatch_xmjl p1 ON  t1.projectno =p1.projectno
	                LEFT JOIN tbl_orgnize_unit p2 on t1.areano = p2.oa_code
                <where>
                    <if test="checkGroup != null and checkGroup != ''"> and t1.checkgroup = #{checkGroup}</if>
                    <if test="projectAddr != null and projectAddr != ''"> and p1.projaddr like CONCAT('%',#{projectAddr},'%')</if>
                    <if test="startDate != null and startDate != ''"> and t1.checkdate &gt;= #{startDate}</if>
                    <if test="endDate != null and endDate != ''"> and t1.checkdate &lt;= #{endDate}</if>
                </where>
            ) t3
            LEFT JOIN tbl_basic_quality t4  ON 	t3.`code` = t4.`code`
            AND t3.ty = t4.type
            order by t3.projectno,t3.checkdate desc ) d
            <where>
                <if test="checkType !=null and checkType != ''"> and d.checktype =#{checkType}</if>
            </where>
    </select>

有见到在case when 做where条件筛选,但像这样把查询的结果嵌套一层查询,然后把前端传来的值做查询条件即可这样简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值