SQL Server、MySQL和 Oracle的行合并


内容引自:
多行一列数据合并成一行一列数据
http://topic.csdn.net/u/20090714/17/5FE6A0F7-CE78-4936-BE31-21D462236059.html

在MySQL和Oracle中实现行合并
http://www.blogjava.net/rain1102/archive/2009/06/24/283867.html


SQL Server

-- SQL2005中的方法2 
create   table  tb(id  int , value  varchar ( 10 )) 
insert   into  tb  values ( 1 ' aa '
insert   into  tb  values ( 1 ' bb '
insert   into  tb  values ( 2 ' aaa '
insert   into  tb  values ( 2 ' bbb '
insert   into  tb  values ( 2 ' ccc '
go  

select  id,  [ values ] = stuff (( select   ' , ' + [ value ]   from  tb t  where  id = tb.id 
for  xml path( '' )),  1 1 ''
from  tb 
group   by  id 

/*  
id          values 
----------- -------------------- 
1          aa,bb 
2          aaa,bbb,ccc 

(2 row(s) affected) 

*/  

drop   table  tb 



MySQL

select  name , group_concat(email  order   by  email separator ", ")  as  email  from  student  group   by  name



Oracle

如果以上效果想在Oracle中显示, 则比较复杂点了, 因为Oracle中没有行合并函数, 则需要使用sys_connect_by_path()来实现, 代码如下:
select  name,  ltrim (sys_connect_by_path(email, ' , ' ), ' , ' ) email  from (
select  name,email,
row_number() 
over (partition  by  name  order   by  email) rn,
count ( * over (partition  by  name) cnt
from  student 
where   level   =  cnt
start 
with  rn  =   1
connect 
by  prior name  =  name  and  prior rn  +   1   =  rn 

转载于:https://www.cnblogs.com/kiant71/archive/2010/04/09/1752006.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值