分组统计
对2列分组:
-----------------------------------------------------------------------------------------------
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
create table tb(group_number int,synch_Experimentguid int, course_name varchar(10))
insert into tb values(0, 4, '语文1')
insert into tb values(0, 3, '计算机')
insert into tb values(0, 1, '物理')
insert into tb values(1, 3, '计算机')
insert into tb values(1, 4, '语文1')
insert into tb values(2, 3, '计算机')
insert into tb values(2, 1, '物理')
insert into tb values(3, 3, '计算机')
insert into tb values(4, 1, '物理')
insert into tb values(5, 4, '语文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 varchar) from 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 varchar) from 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
insert into tb values(0, 4, '语文1')
insert into tb values(0, 3, '计算机')
insert into tb values(0, 1, '物理')
insert into tb values(1, 3, '计算机')
insert into tb values(1, 4, '语文1')
insert into tb values(2, 3, '计算机')
insert into tb values(2, 1, '物理')
insert into tb values(3, 3, '计算机')
insert into tb values(4, 1, '物理')
insert into tb values(5, 4, '语文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 varchar) from 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 varchar) from 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
浙公网安备 33010602011771号