列转行

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
;

 

相关文章: