SQL 列转行

本文介绍了SQL中将列转换为行的函数,包括Oracle的listagg和wm_concat,以及MySQL的group_concat。通过具体例子展示了如何使用这些函数,例如在节点表中将层级关系转换为行格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL 列转行函数

Oracle:

listagg()

**listagg(字段名,’‘分隔符’) within group(order by 字段名) **

with temp as(  
  select 'China' nation ,'Guangzhou' city from dual union all  
  select 'China' nation ,'Shanghai' city from dual union all  
  select 'China' nation ,'Beijing' city from dual union all  
  select 'USA' nation ,'New York' city from dual union all  
  select 'USA' nation ,'Bostom' city from dual union all  
  select 'Japan' nation ,'Tokyo' city from dual   
)  
select nation,listagg(city,',') within GROUP (order by city)  cities
from temp  
group by nation



执行结果

NATIONCITIES
ChinaBeijing,Guangzhou,Shanghai
JapanTokyo
USABostom,New York

wm_concat()

使用wm_concat能达到同样的效果:

select nation,wm_concat(city) from temp group by nation

MySQL:

下表为 节点表:

id parent_id name

1 0 根节点
2 1 一级节点
3 1 一级节点
4 1 一级节点
5 3 二级节点
6 2 二级节点
7 4 二级节点
8 5 三级节点
9 5 三级节点
10 5 三级节点
11 6 三级节点
12 11 四级节点
13 10 四级节点

使用group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

select t.name, GROUP_CONCAT(t.id ORDER BY t.`name` SEPARATOR ',') ids from tree t GROUP BY t.name

查询结果:

nameids
一级节点4,3,2
三级节点11,10,9,8
二级节点7,6,5
四级节点13,12
根节点1





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值