set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[hjfx]
@rq1 varchar(8),
@rq2 varchar(8),
@khdm varchar(8000)
as
begin transaction
--插入指定条件的数据到临时表
delete from hjfxtest
declare @inst varchar(8000)
set @inst='insert into hjfxtest select * from hjfxmx where 客户代码 in ('+@khdm+') and 销售日期 between '''+@rq1+''' and '''+@rq2+''''
exec(@inst)--进行行列转换
declare @sql varchar(8000)
set @sql = 'select hjfxmm.* '
select @sql = @sql + ', sum(case hjfxtest.客户名称 when ''' +客户名称+ ''' then 总数 else 0 end) [' +客户名称+ '] '
from (select distinct 客户名称 from hjfxtest ) as t
set @sql = @sql + ' from hjfxmm left join hjfxtest on hjfxtest.商品代码 = hjfxmm.商品代码 group by hjfxmm.商品代码 ,hjfxmm.商品名称'
--select @sql
exec(@sql)  
commit transaction
SET ANSI_NULLS OFF

解决方案 »

  1.   

    ALTER PROCEDURE [dbo].[hjfx]
    @rq1 varchar(8),
    @rq2 varchar(8),
    @khdm varchar(8000)
    as
    begin transaction
    --插入指定条件的数据到临时表
    delete from hjfxtest
    declare @inst varchar(8000)
    set @inst='insert into hjfxtest select * from hjfxmx where 客户代码 in ('+@khdm+') and 销售日期 between '''+@rq1+''' and '''+@rq2+''''
    exec(@inst)--进行行列转换
    declare @sql varchar(8000)
    set @sql = 'select hjfxmm.* '
    select @sql = @sql + ', sum(case hjfxtest.客户名称 when ''' +客户名称+ ''' then 总数 else 0 end) [' +客户名称+ '] '
    from (select distinct 客户名称 from hjfxtest ) as t
    set @sql = @sql 
    + ' into ##tb '   -- 添加
    + ' from hjfxmm left join hjfxtest on hjfxtest.商品代码 = hjfxmm.商品代码 group by hjfxmm.商品代码 ,hjfxmm.商品名称'
    --select @sql
    exec(@sql)   
    commit transaction
    SET ANSI_NULLS OFF