分组统计

对2列分组:
create table tb(group_number int,synch_Experimentguid int, course_name varchar(10))
insert into tb values(04'语文1')
insert into tb values(03'计算机')
insert into tb values(01'物理')
insert into tb values(13'计算机')
insert into tb values(14'语文1')
insert into tb values(23'计算机')
insert into tb values(21'物理')
insert into tb values(33'计算机')
insert into tb values(41'物理')
insert into tb values(54'语文1')
go


--创建一个合并的函数
create function f_hb(@group_number int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ''
select @str = @str + ',' + cast(synch_Experimentguid as varcharfrom tb where group_number = @group_number
set @str = right(@str , len(@str- 1)
return(@str)
End
go

--创建一个合并的函数
create function f_hb2(@group_number int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ''
select @str = @str + ',' + cast(course_name as varcharfrom tb where group_number = @group_number
set @str = right(@str , len(@str- 1)
return(@str)
End
go
--调用自定义函数得到结果:
select distinct group_number ,dbo.f_hb(group_number) synch_Experimentguid,dbo.f_hb2(group_number) course_name from tb

drop table tb
drop function f_hb,f_hb2

-----------------------------------------------------------------------------------------------



工作中遇到问题:
HY  HU
1   A
2   B
1   C
3   D

需要结果:
HY  HU
1   A,C
2   B
3   D

实现过程:

create table tb(HY varchar(10),HU varchar(100))
go
insert into tb
select 1,'A' union all
select 2,'B' union all
select 1,'C' union all
select 3,'D'
go
--写一个聚合函数:
create function dbo.fn_Merge(@HY int)
returns varchar(8000)
as
begin
   
declare @r varchar(8000)
   
set @r=''
   
select @r=@r+','+HU from tb where HY=@HY
   
return stuff(@r,1,1,'')
end
go

-- 调用函数
select HY, dbo.fn_Merge(HY) as HU from tb group by HY
  
go
drop table tb
drop function dbo.fn_Merge
posted @ 2007-08-17 21:23  jhtchina  阅读(200)  评论(0)    收藏  举报