declare @sql varchar(8000)
set @sql='select aa '
select @sql=@sql+',sum(case bb when bb then cc end ) as bb '
from (select distinct bb from table) as a
select @sql=@sql+'group by aa'
print @sql
exec(@sql)

解决方案 »

  1.   

    create proc mysp_town
    as
    declare @sql varchar(8000)
    set @sql='select companyid '
    select @sql=@sql+',sum(case town when town then townnum end ) as town '
    from (select distinct town from town_num) as aaaa
    select @sql=@sql+'group by companyid'
    print @sql
    exec(@sql)----------------------------
    命令成功完成。然后运行declare @sql varchar(8000)
    set @sql='select companyid '
    select @sql=@sql+',sum(case town when town then townnum end ) as town '
    from (select distinct town from town_num) as aaaa
    select @sql=@sql+'group by companyid'
    print @sql
    exec(@sql)这样就出问题了。为什么,哪里错了??
      

  2.   

    在SQL查询分析器里应该不会出错的
    出错提示?
      

  3.   

    declare @sql varchar(8000)
    set @sql='select companyid '
    select @sql=@sql+',sum(case town when town then townnum end ) as town 
    from (select distinct town from town_num) as aaaa'
    select @sql=@sql+' group by companyid'
    print @sql
    exec(@sql)
      

  4.   

    aa bb cc 的那些变量无效
      

  5.   

    declare @sql varchar(8000)
    set @sql='select companyid '
    select @sql=@sql+',sum(case town when '+cast(town as varchar)+' then townnum end ) as town 
    from (select distinct town from town_num) as aaaa'
    select @sql=@sql+' group by companyid'
    print @sql
    exec(@sql)你看看sql语句做改变就可以了
      

  6.   

    我试过了,是完全正确的:
    create table temp1
    (
         aa varchar(20),
         bb varchar(20),
         cc numeric(9)
    )insert into temp1 values('博路','城区',25)
    insert into temp1 values('博路','石龙',50)
    insert into temp1 values('博路','大良',23)
    insert into temp1 values('国信','城区',40)
    insert into temp1 values('国信','长安',32)
    select * from temp1declare @sql varchar(8000)
    set @sql='select aa '
    select @sql=@sql+',isnull(sum(case bb when '''+a.bb+''' then cc end ),0) as '+a.bb 
    from (select distinct bb from temp1) as aselect @sql=@sql+' from temp1 group by aa'
    print @sql
    exec(@sql)