当前位置: 代码迷 >> Sql Server >> 求SQL表达式 把1列的数据合在一起,根据其中一个列group
  详细解决方案

求SQL表达式 把1列的数据合在一起,根据其中一个列group

热度:31   发布时间:2016-04-24 18:49:26.0
求SQL表达式 把一列的数据合在一起,根据其中一个列group
求SQL表达式 把一列的数据合在一起,根据其中一个列group
类似以下结构:
create table tb(姓名 varchar(10),姓名 varchar(10),分数 int)

insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)
......................................
......................................
怎么把以上数据变为以下:

姓名    NewString
张三    语文数学物理...
李四    语文数学物理...

------解决方案--------------------
试试这个:

--drop table tb

create table tb(姓名 varchar(10),课程 varchar(10),分数 int)

insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)
go

select distinct
       姓名,
       replace((select ','+课程 from tb t where t.姓名 = tb.姓名 for xml path('')),',','') as 课程
from tb
/*
姓名 课程
李四 语文数学物理
张三 语文数学物理
*/

------解决方案--------------------
通用写法
create table tb(姓名 varchar(10),课程 varchar(10),分数 int)

insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)


go
if object_id('F_Str') is not null
    drop function F_Str
go
create function F_Str(@Col1 varchar(10))
returns nvarchar(100)
as
begin
    declare @S nvarchar(100)
    select @S=isnull(@S+'','')+课程 from tb where 姓名=@Col1
    return @S
end
go
Select distinct 姓名,NewString=dbo.F_Str(姓名) from tb
/*
姓名         NewString
---------- ----------------------------------------------------------------------------------------------------
李四         语文数学物理
张三         语文数学物理
*/
  相关解决方案