declare @sql ,varchar(8000) 
set @sql = 'select TYPE_NAME ' 
select @sql = @sql + ' , sum(case a.TYPE_ID when ''' + TYPE_ID + ''' then 1 else 0 end) [' + TYPE_NAME + ']' 
from TYPE_TBL
set @sql = @sql + N',count(1)总数 from collect_tbl a inner join TYPE_TBL b on a.AREA_ID=b.TYPE_ID group by b.TYPE_NAME with rollup' 
exec(@sql)

解决方案 »

  1.   

    declare @sql ,varchar(8000) 
    set @sql = 'select TYPE_NAME =isnulll(TYPE_NAME,''总数'')' 
    select @sql = @sql + ' , sum(case a.TYPE_ID when ''' + TYPE_ID + ''' then 1 else 0 end) [' + TYPE_NAME + ']' 
    from TYPE_TBL
    set @sql = @sql + N',count(1)总数 from collect_tbl a inner join TYPE_TBL b on a.AREA_ID=b.TYPE_ID group by b.TYPE_NAME with rollup' 
    exec(@sql)
      

  2.   

    declare @sql varchar(8000) 
    set @sql = 'select a.AREA_NAME ' 
    select @sql = @sql + ' , sum(case TYPE_ID when ''' + TYPE_ID + ''' then 1 else 0 end) [' + TYPE_NAME + ']' 
    from TYPE_TBL set @sql = @sql + ' from collect_tbl c,AREA_TBL A
    WHERE A.AREA_ID=C.AREA_ID
    group by A.AREA_NAME' 
    exec(@sql)
      

  3.   

    楼上大哥,你好
    这样写,是不是说就是用户每改变一个不同的输入我就需要重新写这个语句呢?其实对sql我是新手,刚学!那位知道也指点我一下。我就是想  能不能这个语句里面出现的所有表名跟字段名都用参数传递过来呢?例如 这次查的是TYPE_NAME,跟AREA_NAME,我下次查的是DATATYPE_NAME跟AREA_NAME,我是不是又要重新写个语句?
      

  4.   

    try declare @sql ,varchar(8000) 
    set @sql = 'select TYPE_NAME =isnulll(TYPE_NAME,''总数'')' 
    select @sql = @sql + ' , sum(case a.TYPE_ID when ''' + TYPE_ID + ''' then 1 else 0 end) [' + TYPE_NAME + ']' 
    from TYPE_TBL
    set @sql = @sql + N',count(1)总数 from collect_tbl a inner join TYPE_TBL b on a.AREA_ID=b.TYPE_ID group by b.TYPE_NAME with rollup' 
    exec(@sql)