declare @sql  varchar(8000)
select EmplNo,WorkInfo, Type,dateIn  from TempData 
set @sql = ''
set @sql = 'select EmplNo as 员工, Type as 业务  '
select @sql = @sql + ',['+dateIn+']=sum(case dateIn when '''+dateIn+''' then WorkInfo else 0 end)'
from TempData
group by dateIn
order by dateInset @sql = @sql + ' ,[合计]=sum(WorkInfo)'   --增加这句
select @sql= @sql+ ' from TempData group by EmplNo, SaleType,TYPE  ' 
exec(@sql)

解决方案 »

  1.   

    set @sql = @sql + ' ,[合计]=sum(isnull(WorkInfo,0))' 
    select @sql= @sql+ ' from TempData group by EmplNo, SaleType,TYPE  ' 
      

  2.   

    --谢谢  wangtiecheng !可以实现!!!
    --如果再改一下,输出以下的结果呢?-----------------------------------------------------------------------------------
    EmplNo        SaleType  Type          01-15     01-16   01-17    01-18       合计
    ------------------------------------------------------------------------------------
    0000 冲红     开户      业绩(现金)    9000.00   .00     .00      .00         9000.00
    0000 冲红     单项      业绩(现金)    660.00    460.00  182.00   .00         1302.00
    1111 冲红     单项      业绩(现金)    .00       .00     .00      1080.00     1080.00
    0000 冲红     单项      业绩(免单)    240.00    .00     3.00     .00         243.00总计                                  9900.00   460.00  185.00   1080.00     11625.00
    即:
       1.按 合计 进行降序排列
       2.对所有纵列的日期的数据进行汇总
      

  3.   

    declare @sql  varchar(8000)
    select EmplNo,WorkInfo, Type,dateIn  from TempData 
    set @sql = ''
    set @sql = 'select EmplNo as 员工, Type as 业务  '
    select @sql = @sql + ',['+dateIn+']=sum(case dateIn when '''+dateIn+''' then WorkInfo else 0 end)'
    from TempData
    group by dateIn
    order by dateInset @sql = @sql + ' ,[合计]=sum(WorkInfo)'   --增加这句合计
    select @sql= @sql+ ' from TempData group by EmplNo, SaleType,TYPE   ' declare @s varchar(8000)
    set @s = ''
    set @s = 'select ''合计:'' as 员工, null as 业务  '
    select @s = @s + ',['+dateIn+']=sum(case dateIn when '''+dateIn+''' then WorkInfo else 0 end)'
    from (select dateIn,sum(WorkInfo) as WorkInfo from TempData group by dateIn) ttset @s = @s + ' ,[合计]=sum(WorkInfo)'   --增加这句合计
    select @s= @s+ ' from TempData  order by 员工 asc,合计 desc ' print @sql
    print @sexec(@sql + ' union ' + @s )/*
    --执行结果:
    员工 业务 01-15 01-16 01-18 01-20 合计
    0000 冲红 业绩(现金) 9000 0 0 0 9000
    0000 冲红 业绩(现金) 660 460 182 0 1302
    0000 冲红 业绩(免单) 240 0 3 0 243
    1111 冲红 业绩(现金) 0 0 0 1080 1080
    合计: NULL 9900 460 185 1080 11625*/
      

  4.   

    wangtiecheng 出手可真快!可以输出正确的结果。感谢!另请教 :
             exec(@sql + ' union ' + @s )
          其中的 @s 相当于 执行了 两次的 @sql ??,可不可以 在执行  exec(@sql) 后,其结果再做  总计   ?这样效率会如何?
      

  5.   

    可以把结果数据生成一张表,对此表进行数据操作关于动态SQL语句的语句,请参见:动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  6.   

    另请教 :
             exec(@sql + ' union ' + @s )
          其中的 @s 相当于 执行了 两次的 @sql ??,可不可以 在执行  exec(@sql) 后,其结果再做  总计   ?这样效率会如何?
    --------------------------------------其实都是在Exec中解释执行的,对两个数据集进行union
    执行exec(@sql)后,再作统计可能比较麻烦,因为列是动态的
      

  7.   


    执行exec(@sql)后,再作统计可能比较麻烦,因为列是动态的----------------------------------------------------------
    这也是最主要原因
    呵呵,感谢  wangtiecheng !!! 结账,给分!