在单行中选择用多行分隔的多行

问题描述 投票:1回答:2

我有一个值如下的表。

    Id Name Fruit
    ------------
    1 Jon  Apple
    ------------
    2 Jon  Orange
    ------------
    3 Jon  Grape
    ------------
    4 Mike Apple
    ------------
    5 Mike Orange
    -------------

如何在mysql中将列区分为类似的内容?

    Name Fruit
    ----------
    Jon  Apple
         Orange
         Grape
    -----------
    Mike Apple
         Orange
    -----------
mysql sql group-concat
2个回答
7
投票

这应该做

select name, group_concat(fruit SEPARATOR '\n') from your_table group by name

CHECK DEMO HERE

更新以添加编号:

SELECT   name, 
         GROUP_CONCAT(CONCAT(rn,')', fruit) SEPARATOR '\n') 
FROM     ( SELECT *, Row_number() over (partition BY name ) AS rn 
           FROM   demotable) a 
GROUP BY name

DEMO WITH NUMBERING


0
投票

另一个选项也使用joins来满足此要求。

select 
    case when t1.id = t2.id then t1.name else '' end 
    , t3.fruits
from 
    (select min(id) id, name from testA
        group by name) t1
left join
    testA t2 on t2.name = t1.name
left join
    testA t3 on t3.id = t2.id
order by t2.id asc

请参见dbfiddle

© www.soinside.com 2019 - 2024. All rights reserved.