SELECT
t.communityName,
t.pointName,
GROUP_CONCAT(t.status ORDER BY recordDate),
GROUP_CONCAT(t.recordDate ORDER BY recordDate)
from (select
recordDate,communityName,pointName,
case attendPointStatus
when '1' then '全勤'
when '2' then '缺勤'
else '旷工' end status
from zszy_app_staff_attend_point_record_202011 where streetId = 'cf6bc48d51454c15841f441bf7916b24' ORDER BY pointName,communityName,recordDate)t GROUP BY t.pointName
语法:GROUP_CONCAT( [DISTINCT] 要连接的字段(fieldA) [ORDER BY 排序字段(fieldB) ASC/DESC] [SEPARATOR '分隔符'] )
说明:DISTINCT -- 对连接字段fieldA去重;ORDER BY -- 要连接的字段fieldA依据字段fieldB排序; SEPARATOR -- 连接以什么作为分隔符。
坑:
1.int字段的连接:如果连接字段是int型,要先转换成char再拼起来, 否则执行后返回的将不是用分隔符分割的字符串, 而是byte[]。 该问题比较隐蔽,在可视化的工具中是体现不出来的。注:在高版本的MySQL中已不存在int连接问题,如果遇到问题可以使用CAST(field AS CHAR)函数进行转换,用CHAR()函数不好使。
2..连接后长度: 字段连接后是有长度限制的,超过限制的会被截取掉。但可以通过group_concat_max_len系统变量进行设置最大长度。