首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

Excel归拢单列重复数据的其它列

2014-01-15 
Excel合并单列重复数据的其它列表如下:网易张三139男北京网易李四138男浙江阿里王五139女北京网易孙一135

Excel合并单列重复数据的其它列
表如下:

网易   张三    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
/*
t1t2t3t4t5
阿里王五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

/*
webcnametelnosexarea
---------------------------------------------------
网易张三,李四,孙一139男北京
阿里王五139女北京
*/

[解决办法]
引用:
sql2000有法子不?


建表,外加建一个函数:
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);    
        
    set @str = '';    
        
    --这里的code改为需要合并的字段    
    select @str = @str + @split + t2   
    from tb    
    where t1 = @id    
        
    set @str = stuff(@str,1,1,'' )    
        
    return @str   --返回值     
end    
go



查询:

if OBJECT_ID('tempdb..#temp') is not null
   drop table #temp
go

select identity(int,1,1) id,t1,dbo.fn_mergeSTR(t1,',') t2,t3,t4,t5 
       into #temp
from tb


select t1,t2,t3,t4,t5
from 
(
select *,
       (select COUNT(*) from #temp b where a.id >= b.id and a.t1 = b.t1) rownum
from #temp a
)t
where rownum = 1
/*
t1t2t3t4t5
网易张三,李四,孙一139男北京
阿里王五139女北京
*/

热点排行