--邹老大的例子有表tb, 如下:
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc即, group by id, 求 value 的和(字符串相加)这个问题的一般处理方法是, 写一个聚合函数:
create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+','+value from tb where id=@id
return stuff(@r,1,1,'')
end
go-- 调用函数
select id, values=dbo.f_str(id) from tb group by id
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc即, group by id, 求 value 的和(字符串相加)这个问题的一般处理方法是, 写一个聚合函数:
create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+','+value from tb where id=@id
return stuff(@r,1,1,'')
end
go-- 调用函数
select id, values=dbo.f_str(id) from tb group by id
解决方案 »
- 关于数据库的问题
- sql菜比求帮助、
- sql语句怎么实现按照一定规则把年月日时间转化成年月时间
- sql server2008 附加2000数据库失败!
- 被一个SQL语句搞得我快爆了,特来求教
- bbbandAAA???
- 安装sql server 2008 express版出现问题!
- 我用多个select语句取出一系列字段,如何语句实现将这些字段分别存入.xls文件,表头用我定义的别名!急,在线等待!
- oracle可视化的工具
- exec sp_dboption 'dbname','single user','false'出错,提示其他用户在使用,如何解决?当别的用户在使用的时候我如何也能恢复!?
- JSP调用“存储过程”出错,但是用“查询分析器”执行是正确的。
- 小弟有问题请教,大家别嫌分少,请邹建大哥,还有众位高人帮帮忙,谢谢
create table 表(部门 int,人员 varchar(20))
insert into 表 select 1,'张三'
insert into 表 select 1,'李四'
insert into 表 select 1,'王五'
insert into 表 select 2,'赵六'
insert into 表 select 2,'邓七'
insert into 表 select 2,'刘八'
go--创建用户定义函数
create function f_str(@department int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+人员 from 表 where 部门 = @department
set @ret = stuff(@ret,1,1,'')
return @ret
end
go
--执行
select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
go--输出结果
/*
部门 人员
---- --------------
1 张三,李四,王五
2 赵六,邓七,刘八
*/
--删除测试数据
drop function f_str
drop table 表
go
create function f_str(@Sc_num int,@Pack_num int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+'_'+Quota from 表 where Sc_num=@Sc_num and Pack_num=@Pack_num
set @ret = stuff(@ret,1,1,'')
return @ret
end
go
--执行
select Sc_num,Pack_num,dbo.f_str(Sc_num,Pack_num) as Quota from 表 group by Sc_num,Pack_num
go
insert into tb_test Select 1 , 1 , 'AB'
union all Select 1 , 2 , 'COU'
union all Select 1 , 3 , 'HE1'
union all Select 1 , 2 , 'KL'
union all Select 1 , 3 , 'CU'
gocreate function f_test( @Sc_num int,@pack_num int )
returns varchar(8000)
as
begin
declare @return varchar(8000)
set @return = ''
Select @return = @return + '_'+ Quota from tb_test where Sc_num = @Sc_num and pack_num = @pack_num
set @return = stuff(@return,1,1,'')
return @return
end
go select Sc_num,pack_num,dbo.f_test(Sc_num,pack_num) from tb_test group by Sc_num,pack_num
drop table tb_test
drop function f_test