declare @sql varchar(2000)set @sql = 'select 部门号'
select @sql = @sql + ',sum(case 月份 when '''+月份+''' then 应发金额 end) ['+ 月份+']'
 from (select distinct 种类 from t1) as a
set @sql=@sql+',sum(应发金额) as 小计'
select @sql = @sql+' from t1 group by 部门号'
exec(@sql)要获得部门名需要关联其他的table吧

解决方案 »

  1.   

    t1是我顺便写的一个table名,就是你的工资表啊
      

  2.   

    呵呵,这是交叉表,用的动态sql,慢慢看:)另外FAQ里有很多这样的例子,你搜行列转换或者交叉表
      

  3.   

    我自己写了个看下对不对
    select 部门号,
    '1月'=sum(case
                           when 月份='1月' then 应发金额 else 0 end),
    '2月'=sum(case
                           when 月份='2月' then 应发金额 else 0 end),
    '3月'=sum(case
                   when 月份='3月' then 应发金额 else 0 end),
    '4月'=sum(case
           when 月份='4月' then 应发金额 else 0 end),
    '5月'=sum(case
           when 月份='5月' then 应发金额 else 0 end),
    '6月'=sum(case
           when 月份='6月' then 应发金额 else 0 end),
    '7月'=sum(case
           when 月份='7月' then 应发金额 else 0 end),
    '8月'=sum(case
           when 月份='8月' then 应发金额 else 0 end),
    '9月'=sum(case
           when 月份='9月' then 应发金额 else 0 end),
    '10月'=sum(case
           when 月份='10月' then 应发金额 else 0 end),
    '11月'=sum(case
           when 月份='11月' then 应发金额 else 0 end),
    '12月'=sum(case
           when 月份='12月' then 应发金额 else 0 end),
            sum(应发金额) as 小计from 工资 group by 部门号我试了最后的小记是对的 但是1月到12月下面 全部不显示金额 都是 0
    看 一下哪里错了哦
      

  4.   

    恩懂了  呵呵 谢谢哇 !我改过来了!
    如果要把部门号 显示成部门名 是不是要 join 部门表哦?