用自定义函数实现:
如:
create function f_union(@suppliername varchar(20))
returns varchar(100)
as
begin
declare @sql varchar(100)
set @sql=''
select @sql=@sql+','+orderNo from 表 where 字段3=@suppliername
return(stuff(@sql,1,1,''))
end
goselect 字段1=dbo.f_union(supplierName),字段2=sum(字段2),字段3
from 表 group by 字段3
如:
create function f_union(@suppliername varchar(20))
returns varchar(100)
as
begin
declare @sql varchar(100)
set @sql=''
select @sql=@sql+','+orderNo from 表 where 字段3=@suppliername
return(stuff(@sql,1,1,''))
end
goselect 字段1=dbo.f_union(supplierName),字段2=sum(字段2),字段3
from 表 group by 字段3
returns varchar(100)
as
begin
declare @sql varchar(100)
set @sql=''
select @sql=@sql+','+字段1 from 表 where 字段3=@suppliername
return(stuff(@sql,1,1,''))
end
goselect 字段1=dbo.f_union(字段1),字段2=sum(字段2),字段3
from 表 group by 字段3
Create table 表(字段1 varchar(10),字段2 int,字段3 varchar(10))
insert into 表 select 'aa',11,'t'
union all select 'bb',22,'t'
--建函数
Create function sumc(@字段3 varchar(10))
returns varchar(200)
as
begin
declare @return varchar(200)
set @return=''
select @return=@return+','+字段1 from 表 where 字段3=@字段3
return(stuff(@return,1,1,''))
end
--查询
select
字段1=dbo.sumc(字段3),
字段2=sum(字段2),
字段3
from
表
group by
字段3
--结果
字段1 字段2 字段3
------ ----- -------
aa,bb 33 t
--删除环境
Drop table 表
Drop function sumc
from 表 where 字段3=@suppliername 怎么解释,好像把表和条件字段固定里面了
----------
创建函数成功后,对于类似的字符串格式处理,都可以采用该函数处理
只是表名要稍微改一下!from 表 where 字段3=@suppliername
对,固定表了,函数里面不可以象存储过程那样传递表名,然后用exec()方法执行字段呢,就不固定,看结构中处理的字段,直接传字段名过来就可以了!你主要是要理解这个思想还得看最后那个select 语句是怎么执行的
select sumc(字段1),sum(字段2),字段3 group by 字段3 这句是我随便写的, 字段3=@suppliername和我这个group by 字段3 两个字段3有关系吗,我在写的时候直接写dbo.f_union(要相加的字段名就可以了)?
我在写的时候直接写dbo.f_union(要相加的字段名就可以了)?不可以!
我写的后面那句是写急了 写成字段1=dbo.f_union(字段1)是错的
该是字段1=dbo.f_union(字段3) 也就是分组的那个字段
--------->
@suppliername 是一个变量啊!分组的变量!
---------------
这句话就要结合后面那句select 语句来理解select 字段1=dbo.f_union(字段3),字段2=sum(字段2),字段3
from 表 group by 字段3
在该语句执行中,“字段1=dbo.f_union(字段3)” 是逐行扫秒记录行,
是将当前字段3 的字段值传给函数,写的是字段名!