create function fn_Linkman(
@Company varchar(30)
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r=''
select @r=@r+'&++&'+isnull(Linkman,'') from 原始数据库 where Company=@Company group by Linkman
if @r<>''
set @r=stuff(@r,1,4,'')
return @r
endgocreate function fn_Tel(
@Company varchar(30)
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r=''
select @r=@r+'&++&'+isnull(Tel,'') from 原始数据库 where Company=@Company group by Tel
if @r<>''
set @r=stuff(@r,1,4,'')
return @r
endgo
...--调用
select Company,dbo.fn_Linkman(Company) as Linkman,dbo.fn_Tel(Company) as Tel
from 原始数据库
group by Company
@Company varchar(30)
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r=''
select @r=@r+'&++&'+isnull(Linkman,'') from 原始数据库 where Company=@Company group by Linkman
if @r<>''
set @r=stuff(@r,1,4,'')
return @r
endgocreate function fn_Tel(
@Company varchar(30)
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r=''
select @r=@r+'&++&'+isnull(Tel,'') from 原始数据库 where Company=@Company group by Tel
if @r<>''
set @r=stuff(@r,1,4,'')
return @r
endgo
...--调用
select Company,dbo.fn_Linkman(Company) as Linkman,dbo.fn_Tel(Company) as Tel
from 原始数据库
group by Company
而你的结果是
Company Linkman Tel
公司1 1P1+1P2&++&1P2&++&1P3 1T1&++&1T6
公司2 2P1 2T1
公司3 3P1&++&3P2 3T1要求的结果
Company Linkman Tel
公司1 1P1+1P2&++&1P3 1T1&++&1T6
公司2 2P1 2T1
公司3 3P1&++&3P2 3T1
整理后数据库
Company Linkman Tel ……
公司1 1P1+1P2&++&1P3 1T1&++&1T6
公司2 2P1 2T1
公司3 3P1&++&3P2 3T1
*/
declare @t1 table(company varchar(20),linkman varchar(20),tel varchar(20))
declare @tb table (company varchar(20),linkman varchar(4000),tel varchar(4000))
insert into @t1
select '公司1','1P1+1P2','1T1' union all
select '公司2','2P1','2T1' union all
select '公司3','3P1','3T1' union all
select '公司1','1P2','1T6' union all
select '公司1','1P3','1T1' union all
select '公司3','3P2','3T1' union all
select '公司2','2P1','2T1'
--select * from @t1
declare @col1 varchar(20),@col2 varchar(20),@col3 varchar(20)
declare @ls1 varchar(20),@ls2 varchar(4000),@ls3 varchar(4000)
declare cur cursor for
select Company,Linkman,Tel from @t1 order by company
open cur
fetch next from cur into @col1,@col2,@col3
select @ls1=@col1,@ls2=@col2,@ls3=@col3
while @@fetch_status=0
begin
if @col1<>@ls1
begin
insert into @tb values(@ls1,@ls2,@ls3)
select @ls1=@col1,@ls2=@col2,@ls3=@col3
end
else
select @ls2=@ls2+(case when charindex(@col2,@ls2)>0 then '' else '&++&'+@col2 end),
@ls3=@ls3+(case when charindex(@col3,@ls3)>0 then '' else '&++&'+@col3 end)fetch next from cur into @col1,@col2,@col3
end
deallocate cur
insert into @tb values(@ls1,@ls2,@ls3)
select * from @tb
Create Function F_TEST(@company Varchar(20), @Flag Bit)
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ''
If(@Flag = 0)
Select @S = @S + (Case When CharIndex(linkman, @S) > 0 Then '' Else '&++&' + linkman End) From TEST Where company = @company
Else
Select @S = @S + (Case When CharIndex(tel, @S) > 0 Then '' Else '&++&' + tel End) From TEST Where company = @company
Select @S = Stuff(@S, 1, 4, '')
Return @S
End
GO
--測試
Select
company,
dbo.F_TEST(company, 0) As linkman,
dbo.F_TEST(company, 1) As tel
From
TEST
Group By
company
GO
Create Table TEST
(company Varchar(20),
linkman Varchar(20),
tel Varchar(20))
Insert Into TEST
Select '公司1','1P1+1P2','1T1' Union All
Select '公司2','2P1','2T1' Union All
Select '公司3','3P1','3T1' Union All
Select '公司1','1P2','1T6' Union All
Select '公司1','1P3','1T1' Union All
Select '公司3','3P2','3T1' Union All
Select '公司2','2P1','2T1'
GO
--創建函數
Create Function F_TEST(@company Varchar(20), @Flag Bit)
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ''
If(@Flag = 0)
Select @S = @S + (Case When CharIndex(linkman, @S) > 0 Then '' Else '&++&' + linkman End) From TEST Where company = @company
Else
Select @S = @S + (Case When CharIndex(tel, @S) > 0 Then '' Else '&++&' + tel End) From TEST Where company = @company
Select @S = Stuff(@S, 1, 4, '')
Return @S
End
GO
--測試
Select
company,
dbo.F_TEST(company, 0) As linkman,
dbo.F_TEST(company, 1) As tel
From
TEST
Group By
company
GO
--刪除測試環境
Drop Table TEST
Drop Function F_TEST
--結果
/*
company linkman tel
公司1 1P1+1P2&++&1P3 1T1&++&1T6
公司2 2P1 2T1
公司3 3P1&++&3P2 3T1
*/
http://topic.csdn.net/t/20041129/14/3598139.html
关注
应该 不用写2个以上函数 做什么判断了