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 <=1 then
'首次巡检'
when t3.checknumber >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 >= #{startDate}</if>
<if test="endDate != null and endDate != ''"> and t1.checkdate <= #{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条件筛选,但像这样把查询的结果嵌套一层查询,然后把前端传来的值做查询条件即可这样简单。