create table tbnew (编号 varchar(10),部门 varchar(10),姓名 varchar(10),加班工资 int,加班原因 varchar(10),日期 varchar(10)) insert into tbnew select '1-339-4','财务处','王红',20,'值班','2006-03-01'
union all select '1-339-1','财务处','王红',30,'做报表','2006-03-07'
union all select '1-339-1','财务处','王红',50,'替值班','2006-03-20'
union all select '1-339-1','财务','王红',50,'替值班','2006-03-20'
union all select '1-339-1','财务','王红',20,'替值班','2006-03-20'
union all select '1-339-1','财务','王红',10,'替值班','2006-03-20'
union all select '1-339-1','财务','王',10,'替值班','2006-03-20'
union all select '1-339-1','财务','王',30,'替值班','2006-03-20'
go
create function word( @bm varchar(1000),@bh varchar(1000) )
returns varchar(1000)
as 
begin 
declare @sql varchar(1000)
set @sql=''
select @sql=@sql+','+cast(日期 as varchar)+cast(加班原因 as varchar) from tbnew where 编号=@bh and 部门=@bm
return stuff(@sql,1,1,'')
end
select 编号,部门,姓名,sum(加班工资) as 加班工资,dbo.word(编号,部门) as 加班原因 from tbnew group by 部门,姓名,编号
请帮我看一下,为什么查出来的加班原因返回的是NULL

解决方案 »

  1.   

    create function word(@bm varchar(1000),@bh varchar(1000))改成:
    create function word(@bh varchar(1000),@bm varchar(1000))
      

  2.   

    select 编号,部门,姓名,sum(加班工资) as 加班工资,dbo.word(编号,部门) as 加班原因 from tbnew group by 部门,姓名,编号
    把里面的word(编号,部门) 换下位置成
    word(部门,编号)
      

  3.   

    --调用提供的参数值错误。导致函数内查询没有结果。同时当使用stuff对一个空字符串执行截取时返回的是个空。
    select 编号,部门,姓名,sum(加班工资) as 加班工资,
    dbo.word(部门,编号) as 加班原因 --dbo.word(编号,部门) as 加班原因 
    from tbnew group by 部门,姓名,编号