SQL列转行就是获取数据表中的某一列数据整合成一条记录
函数名称:GROUP_CONCAT
用法:select GROUP_CONCAT(userid SEPARATOR ”) FROM detail
assis_userid为要获取的列名,separator为分隔符,在引号里面可以设置以什么分隔,默认以 ,逗号分隔。
举例:
1、默认分割符
SQL:
SELECT GROUP_CONCAT(userid) FROM detail
结果:1,2,3,4,5,6,7
2、指定分隔符
SQL:
SELECT GROUP_CONCAT(`userid` SEPARATOR '|') FROM detail
结果:1|2|3|4|5|6|7
3、去除分隔符
SQL:
SELECT GROUP_CONCAT(`userid` SEPARATOR '') FROM detail
结果:1234567
mybatis中使用:
<update id="updateAssisUseridById" parameterType="java.lang.String">
update ldp_analy_doubt_par
set assis_userid = (
select GROUP_CONCAT(userid separator '') assis_userid
from ldp_analy_doubt_chd
where par_id = #{id}
group by par_id
)
where id = #{id}
</update>
把ldp_analy_doubt_chd表中的符合条件的userid列合并更新到ldp_analy_doubt_par 表的assis_userid 字段中。
另外一种方式就是最普通的方法,先从ldp_analy_doubt_chd表把userid列 查询出来,然后后台遍历拼接,再更新到ldp_analy_doubt_par 表,此处遍历就不贴代码了。
注意:使用此GROUP_CONCAT方法,针对少量的数据可以转化成果,如果是大批量的数据进行转化,亲测不好使,和某些配置有关。如果哪位大牛知道解决方法,请留言告知,感谢!
由于遇到大批量记录列转行,暂时没找到更好的方法,暂时采用代码解决方法。