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 ')), 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