--不能一句select搞定,得建一个函数
create function f_try(@value varchar(100))
returns varchar(1000)
as
begin
declare @a varchar(1000)
set @a=''
select @a=@a+','+field2
from 表名
where field1=@value
return(stuff(@a,1,1,''))
end--查询:
select distinct field1,field2=dbo.f_try(field1) from 表名
create function f_try(@value varchar(100))
returns varchar(1000)
as
begin
declare @a varchar(1000)
set @a=''
select @a=@a+','+field2
from 表名
where field1=@value
return(stuff(@a,1,1,''))
end--查询:
select distinct field1,field2=dbo.f_try(field1) from 表名
--一个自定义函数+一句可以--处理的自定义函数
create function f_str(
@field1 varchar(10)
)returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+','+rtrim(field2) from 表 where field1=@field1
return(stuff(@r,1,1,''))
end
go--调用实现查询
select field1,field2=dbo.f_str(field1) from 表 group by field1
returs varchar(100)
as
begin
declare @ts
select @ts=@ts+','+field2 from 表 where field1=@field1
set @ts=stuff(@ts,1,1,'')
return @ts
endselect field1,dbo.catstr(field1) from 表 group by field1
create function f_try(@value varchar(100))
returns varchar(1000)
as
begin
declare @a varchar(1000)
set @a=''
select @a=@a+','+field2
from 表名
where field1=@value
set @a=left(@a,len(@a)-1)
return(@a)
end--查询:
select distinct field1,field2=dbo.f_try(field1) from 表名
create function f_str(
@field1 varchar(10)
)returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+','+rtrim(work_no) from appoint where bill_id=@field1
select @r
return(stuff(@r,1,1,''))
end
go
--调用实现查询
select bill_id,work_no=dbo.f_str(bill_id) from appoint group by bill_id
1,为什么select @r=@r+','+rtrim(work_no) from appoint where bill_id=@field1 返回的是“aaa,bbb,ccc”而不是
“
,aaa
,bbb
,ccc
”2,当我调用select bill_id,work_no=dbo.f_str(bill_id) from appoint group by bill_id的时候,@field1代表什么?
删除指定长度的字符并在指定的起始点插入另一组字符。语法
STUFF ( character_expression , start , length , character_expression ) 参数
character_expression由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。start是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。length是一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符
---------------------------------------------
2.@field1表示f_str这个函数中的形参.