declare @sql varchar(8000)
declare @jsdm char(7)
set @jsdm='01-0001'
set @sql = 'select gs ,'
select @sql = @sql + 'sum(case convert(varchar(7),r1,120) when '''+convert(varchar(7),r1,120)+''' 
                          then sl else 0 end) as '''+convert(varchar(7),r1,120)+''' ,'  from (select distinct convert(varchar(7),r1,120) as r1  from slk) as a
select @sql = left(@sql,len(@sql)-1) + 'into ##temp  from slk  where gs in (select gs from gs where jsdm1='''+@jsdm+''' group by gs '
exec(@sql)
select * from ##temp
drop table ##tempGO

解决方案 »

  1.   

    declare @sql varchar(8000)
    declare @jsdm char(7)
    set @jsdm='01-0001'
    set @sql = 'select gs ,'
    select @sql = @sql + 'sum(case convert(varchar(7),r1,120) when '''+convert(varchar(7),r1,120)+''' 
                              then sl else 0 end) as '''+convert(varchar(7),r1,120)+''' ,'  from (select distinct convert(varchar(7),r1,120) as r1  from slk) as a
    select @sql = left(@sql,len(@sql)-1) + 'into ##temp  from slk  where gs in (select gs from gs where jsdm1='''+@jsdm+''' group by gs '
    exec(@sql)
    select * from ##temp
    drop table ##tempGO
      

  2.   

    declare @sql varchar(8000)
    declare @jsdm char(7)
    set @jsdm='01-0001'
    set @sql = 'select gs'
    select @sql = @sql + ',sum(case convert(varchar(7),r1,120) when '''
    +convert(varchar(7),r1,120)+''' then sl else 0 end) ['+convert(varchar(7),r1,120)+']'
      from (select distinct convert(varchar(7),r1,120) as r1  from slk) as a
    exec(@sql + 'into ##temp  from slk where gs in (select gs from gs where jsdm1='''+@jsdm+''' group by gs')select * from ##temp
    drop table ##tempGO
      

  3.   

    要将条件直接带到语句中,而不是用变量:declare @sql varchar(8000)
    declare @jsdm char(7)
    set @jsdm='01-0001'
    set @sql = 'select gs ,'
    select @sql = @sql + 'sum(case convert(varchar(7),r1,120) when '''+convert(varchar(7),r1,120)+''' 
                              then sl else 0 end) as '''+convert(varchar(7),r1,120)+''' ,'  from (select distinct convert(varchar(7),r1,120) as r1  from slk) as a
    select @sql = left(@sql,len(@sql)-1) + 'into ##temp  from slk  where gs in (select gs from gs where jsdm1='''+@jsdm+''' group by gs '
    exec(@sql)
    select * from ##temp
    drop table ##tempGO
      

  4.   

    declare @sql varchar(8000)
    declare @jsdm char(7)
    set @jsdm='01-0001'
    set @sql = 'select gs ,'
    select @sql = @sql + 'sum(case convert(varchar(7),r1,120) when '''+convert(varchar(7),r1,120)+''' 
                              then sl else 0 end) as '''+convert(varchar(7),r1,120)+''' ,'  from (select distinct convert(varchar(7),r1,120) as r1  from slk) as a
    select @sql = left(@sql,len(@sql)-1) + 'into ##temp  from slk  where gs in (select gs from gs where jsdm1='''+@jsdm+''' group by gs '
    exec(@sql)
    select * from ##temp
    drop table ##tempGO