列转行
SELECT flag ,substring_index(substring_index(t.context,',', b.help_topic_id + 1), ',', -1) as result FROM ( select 'aa' as flag,'1,2,3,4,5,6,7' as context union all select 'bb' as flag,'1,2,3,4,5,6' as context union all select 'cc' as flag,'1,2,3,4,5' as context union all select 'dd' as flag,'1,2,3,4' as context union all select 'ee' as flag,'1,2,3' as context ) t join ( select 0 as help_topic_id union all select 1 as help_topic_id union all select 2 as help_topic_id union all select 3 as help_topic_id union all select 4 as help_topic_id union all select 5 as help_topic_id union all select 6 as help_topic_id union all select 7 as help_topic_id union all select 8 as help_topic_id union all select 9 as help_topic_id ) b ON b.help_topic_id < (LENGTH(t.context) - LENGTH(REPLACE(t.context, ',', '')) + 1) order by flag,result ;
行转列使用group_concat函数即可
select name ,group_concat(age) as ages from ( select 'a' as name, 0 as age union all select 'b' as name, 1 as age union all select 'b' as name, 2 as age union all select 'c' as name, 3 as age union all select 'c' as name, 4 as age union all select 'c' as name, 5 as age union all select 'd' as name, 6 as age union all select 'd' as name, 7 as age union all select 'd' as name, 8 as age union all select 'd' as name, 9 as age ) b group by name ;