Mapper
List<SalesDataBoardResponse> selectList(@Param("list") List<String> month,String code);
XML
<select id="selectList" resultType="com.etl.appeal.application.response.SalesDataBoardResponse">
select
'DM' as dm_position_code,
dm_name,
<--round四舍五入函数,cast转换类型-->
round(sum(cast("target_value" as numeric)),0) as target_value,
round(sum(cast("actual_value" as numeric)),0) as actual_value ,
round(sum(cast("ly_amount" as numeric)),0) as ly_amount,
m.brand,
n.hospital
from
ims_pm_saleslist,
<--concat_ws拼接字符-->
(select concat_ws('/',a,b) brand from (
select count(*) a from (
select distinct brand_name from ims_pm_saleslist group by brand_name,month,dm_position_code,actual_value
having month = any ( array<foreach collection="list" item="month" open="[" close="]" separator=",">#{month} </foreach>) and
dm_position_code = #{code} and actual_value <> '0') as o
)c,
(select count(*) b from (
select distinct brand_name from ims_pm_saleslist group by brand_name,month,dm_position_code
having month = any ( array<foreach collection="list" item="month" open="[" close="]" separator=",">#{month} </foreach>) and
dm_position_code =#{code}) as o
)d
) as m
,(select concat_ws('/',a,b) hospital from (
select count(1) a from (
select distinct customer_id from ims_pm_saleslist group by customer_id,month,dm_position_code,actual_value
having month = any ( array<foreach collection="list" item="month" open="[" close="]" separator=",">#{month} </foreach>) and
dm_position_code =#{code} and actual_value <> '0') as o
)c,
(select count(1) b from (
select distinct customer_id from ims_pm_saleslist group by customer_id,month,dm_position_code
having month = any ( array<foreach collection="list" item="month" open="[" close="]" separator=",">#{month} </foreach>) and
dm_position_code =#{code} ) as o
)d
)as n
group by dm_position_code,dm_name,month,m.brand,n.hospital
having
<!-- month = '${month}' -->
month = any (
array<foreach collection="list" item="month" open="[" close="]" separator=",">#{month} </foreach>
)
<!-- 可替换成 month in
<foreach collection="list" item="month" open="(" close=")" separator=","> #{month} </foreach> -->
and dm_position_code =#{code}
</select>