DECLARE @sql nvarchar(4000)
SET @sql=N'insert into #t1(f1,f2,f3,f4,f5,f6) 
select '
+case when @f1=0 then 'null' else 'f1' end+','
+case when @f2=0 then 'null' else 'f2' end+','
+case when @f3=0 then 'null' else 'f3' end+','
+case when @f4=0 then 'null' else 'f4' end+','
+'sum(f5),sum(f6) from #T'
exec(@sql)

解决方案 »

  1.   

    select case when @f1=0 then null else f1 end,
    case when @f2=0 then null else f2 end,
    case when @f3=0 then null else f3 end,
    case when @f4=0 then null else f4 end,
    sum(f5),sum(f6) from #T1 
    group by case when @f1=0 then null else f1 end,
    case when @f2=0 then null else f2 end,
    case when @f3=0 then null else f3 end,
    case when @f4=0 then null else f4 end
      

  2.   

    insert into #t1(f1,f2,f3,f4,f5,f6)
    select case when @f1=0 then null else f1 end,
    case when @f2=0 then null else f2 end,
    case when @f3=0 then null else f3 end,
    case when @f4=0 then null else f4 end,
    sum(f5),sum(f6) from #T1 
    group by case when @f1=0 then null else f1 end,
    case when @f2=0 then null else f2 end,
    case when @f3=0 then null else f3 end,
    case when @f4=0 then null else f4 end
      

  3.   

    DECLARE @sql varchar(8000)
    SET @sql='insert into #t1(f1,f2,f3,f4,f5,f6) 
     select '
     +case when @f1=0 then 'null' else 'f1' end+','
     +case when @f2=0 then 'null' else 'f2' end+','
     +case when @f3=0 then 'null' else 'f3' end+','
     +case when @f4=0 then 'null' else 'f4' end+','
     +'sum(f5),sum(f6) from #T'
              +' group by '
     +case when @f1=0 then '' else 'f1' end+','
     +case when @f2=0 then '' else 'f2' end+','
     +case when @f3=0 then '' else 'f3' end+','
     +case when @f4=0 then '' else 'f4' end+','
    if right(@sql,10)='group by ,'
       set @sql=left(@sql,len(@sql)-10)
    else
       set @sql=left(@sql,len(@sql)-1)exec(@sql)