set @s=''Select  @s=@s+','+quotename(rtrim([khmc]))+'=sum(case when rtrim([khmc])='+quotename(rtrim([khmc]),'''')+' then  sl  else null end)' from xsckd t1 where khbh in (select khbh from khbh where khlb=''+rtrim(@khlb)+'')  group by [khmc]改成这样呢?

解决方案 »

  1.   

    改成这样试试,把max修改为sum:create proc getLsckmx 
    @khlb varchar(20),
    @stime varchar(20), 
    @etime varchar(20),
    @khbh1 varchar(50),
    @khbh2 varchar(50)
     AS
    declare @s nvarchar(4000)
    declare @s1 nvarchar(500)
    declare @s2 nvarchar(500)set @s1='where f1=''1'' and  khbh in (select khbh from khbh where khlb='''+rtrim(@khlb)+''')'
    set @s2=' where f1=''1'''
    if @stime<>''
    begin
      set @s1=@s1+' and convert(datetime,xsrq)>='''+@stime+''''
      set @s2=@s2+' and convert(datetime,xsrq)>='''+@stime+''''
    end
    if @etime<>''
    begin
      set @s1=@s1+' and convert(datetime,xsrq)<='''+@etime+''''
      set @s2=@s2+' and convert(datetime,xsrq)<='''+@etime+''''
    endif @khbh1<>''
      set @s1=@s1+' and khbh >='''+@khbh1+''''if @khbh2<>''
      set @s1=@s1+' and khbh <='''+@khbh2+''''set @s=''Select  @s=@s+','+quotename(rtrim([khmc]))+'=sum(case when rtrim([khmc])='+quotename(rtrim([khmc]),'''')+' then  sl  else 0 end)' from xsckd t1 where khbh in (select khbh from khbh where khlb=''+rtrim(@khlb)+'')  group by [khmc]select 'select [cpbh] as 编号,[cpmc] as 产品名称'+@s+',[小计]=sum([sl])  from xsckd '+@s1+'group by [cpbh],[cpmc]'
      

  2.   

    你如果要列转行,为什么不用pivot来实现呢