declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then ISNULL(cj,0) else 0 end) ['+km+']'
 from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)

解决方案 »

  1.   

    干嘛要那样做呢,这样就行了!declare @sql varchar(8000)
    set @sql = 'select name'
    select @sql = @sql + ',sum(case km when '''+km+''' then cj else 0 end) ['+km+']'
     from (select distinct km from test) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)
      

  2.   

    then ISNULL(cj,0) else 0 end
    其中不理解为什么ISNULL(cj,0)没有执行?刚才测试了一下,以下写法也可以的
    declare @sql varchar(8000)
    set @sql = 'select name'
    select @sql = @sql + ',ISNULL(sum(case km when '''+km+''' then cj end),0) ['+km+']'
     from (select distinct km from test) as a
    select @sql = @sql+' from test group by name'
    print @sql
    exec(@sql)
      

  3.   

    没什么奇怪的。sum(isnull(字段))中,sum针对的是“字段”这个字段,而不是isnull(字段)结果后的求和。这里用没用isnull一个样!
      

  4.   

    To wzh1215(懒猫)
    Thank You