表如下:
网易 张三 139 男 北京
网易 李四 138 男 浙江
阿里 王五 139 女 北京
网易 孙一 135 男 浙江
______________________________________________________
现在想把表格里第一列如果同名的,第二列的名字放一块,手机等数据取第一条就行了。
网易 张三、李四、孙一 139 男 北京
阿里 王五 139 女 北京
_____________求高手__________多谢!
------解决方案--------------------
建表:
create table tb(
t1 varchar(30),t2 varchar(30),
t3 varchar(30),t4 varchar(30),
t5 varchar(30)
)
insert into tb
select '网易', '张三', '139', '男', '北京' union all
select '网易', '李四', '138', '男', '浙江' union all
select '阿里', '王五', '139', '女', '北京' union all
select '网易', '孙一', '135', '男', '浙江'
go
查询:
select t1,t2,t3,t4,t5
from
(
select distinct
t1,
stuff((select ','+b.t2 from tb b where a.t1 = b.t1 for xml path(''))
,1,1,'') as t2,
t3,t4,t5,
ROW_NUMBER() over(partition by t1 order by t3 desc) rownum
from tb a
)t
where rownum =1
/*
t1 t2 t3 t4 t5
阿里 王五 139 女 北京
网易 张三,李四,孙一 139 男 北京
*/
------解决方案--------------------
create table #tb(web nvarchar(10),cname nvarchar(10),telno nvarchar(20),sex nvarchar(1),area nvarchar(10))
insert into #tb
select '网易','张三',139,'男','北京'
union all select '网易','李四',138,'男','浙江'
union all select '阿里','王五',139,'女','北京'
union all select '网易','孙一',135,'男','浙江'
go
select a.web,stuff((select ','+cname from #tb b
where b.web=a.web --and b.cname=a.cname
for xml path('')),1,1,'') 'cname'
,telno=(select top 1 telno from #tb c where a.web=c.web)
,sex=(select top 1 sex from #tb c where a.web=c.web)
,area=(select top 1 area from #tb c where a.web=c.web)
from #tb a
group by a.web
drop table #tb
/*
web cname telno sex area
---------------------------------------------------
网易 张三,李四,孙一 139 男 北京
阿里 王五 139 女 北京
*/
------解决方案--------------------
建表,外加建一个函数:
create table tb(
t1 varchar(30),t2 varchar(30),
t3 varchar(30),t4 varchar(30),
t5 varchar(30)
)
insert into tb
select '网易', '张三', '139', '男', '北京' union all
select '网易', '李四', '138', '男', '浙江' union all
select '阿里', '王五', '139', '女', '北京' union all
select '网易', '孙一', '135', '男', '浙江'
go
if exists(select * from sys.objects where name = 'fn_mergeSTR')
drop function dbo.fn_mergeSTR
go
create function dbo.fn_mergeSTR(@id varchar(30),
@split varchar(10)) --分隔符
returns varchar(300)
as
begin
declare @str varchar(300);