declare @temp table (A varchar(4),B varchar(4))
declare @temp2 table (A varchar(4),B varchar(8000))
declare @A varchar(4)
declare @s varchar(8000)
insert @temp
select '1','a'
union all select '1','b'
union all select '1','c'
union all select '2','d'
union all select '2','e'
union all select '3','f'
declare cur_1 cursor for select distinct A from @temp
open cur_1
fetch cur_1 into @A
while @@fetch_status=0
begin
set @s = ''
select @s = @s + ',' + B
from @temp where A=@A
set @s=substring(@s,2,8000)
insert @temp2
select @A,@s
fetch cur_1 into @A
end
deallocate cur_1
select * from @temp2
--测试数据
create table 表(a int,b varchar(10))
insert 表 select 1,'a'
union all select 1,'a '
union all select 1,'b'
union all select 1,'c'
union all select 2,'d'
union all select 2,'e'
union all select 3,'f'
go
--创建处理函数
create function f_merg(@id int)
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+b from 表 where a=@id group by b
return(substring(@re,2,8000))
end
go
--调用实现查询
select a,b=dbo.f_merg(a) from 表 group by a
go
--删除测试
drop table 表
drop function f_merg
/*--测试结果
a b
----------- -----------
1 a,b,c
2 d,e
3 f
--创建处理函数
create function f_merg(@id int)
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+b from 表 where a=@id group by b
return(substring(@re,2,8000))
end
go
--调用实现查询
select a,b=dbo.f_merg(a) from 表 group by a
--创建处理函数
create function f_merg(@id int)
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+b from 表 where a=@id
return(substring(@re,2,8000))
end
go
--调用实现查询
select a,b=dbo.f_merg(a) from 表 group by a
--函數,合並字符串欄位
--測試數據
/*
CREATE table person_info(dept_name varchar(10),position_name varchar(10),person_name varchar(10))
INSERT INTO person_info
SELECT '資訊部','軟件編碼員','小李'
UNION ALL SELECT '資訊部','軟件編碼員','小王'
UNION ALL SELECT '行政部','秘書','小芳'
*/
--合並函數
CREATE FUNCTION FunMergeCharField(@vchA varchar(10),@vchB varchar(10))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r=''
SELECT @r=@r+','+person_name FROM person_info WHERE dept_name=@vchA and position_name=@vchB
RETURN(substring(@r,2,8000))
END
GO
--删除测试
DROP TABLE person_info
DROP FUNCTION FunMergeCharField
--調用
SELECT dept_name,position_name,在職人員=dbo.FunMergeCharField(dept_name,position_name)
FROM person_info
GROUP BY dept_name,position_name
go