我有一个值如下的表。
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
-----------
这应该做
select name, group_concat(fruit SEPARATOR '\n') from your_table group by name
更新以添加编号:
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
另一个选项也使用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。