有如下一个表格 feebase
---------------------------------------
   feeCate   |  person   |  depart   |  fee    |
-----------------------------------------------------------------
   差旅费     | 张三      | 行政部     |  200    |
------------------------------------
   过路费     |  李四      |  董事会    |  1000  |
-----------------------------------
   油费       | 王五       | 财务部    |   200    |
------------------------------------
   过路费    |马六        |  行政部     |  200   |
------------------------------------
 
希望能用一条sql语句 或 存储过程 实现输出以下表格( 其中 费用项目 和 部门 数量不固定
------------------------------------
          | 行政部   |   董事会   |    财务部   |
------------------------------------
  差旅费  | 200     |            |              |
------------------------------------
  过路费   |  200     |   1000   |             |
--------------------------------------------------------------
  油费    |           |            |   200      |
-------------------------------------
能解答者,万分感激! 求高手指点!!!!!!!!!!!!!

解决方案 »

  1.   

    --原始数据:#feebase
    create table #feebase(feeCate varchar(6),person varchar(4),depart varchar(6),fee int)
    insert #feebase
    select '差旅费','张三','行政部',200 union all
    select '过路费','李四','董事会',1000 union all
    select '油费','王五','财务部',200 union all
    select '过路费','马六','行政部',200declare @sql varchar(8000)select @sql=coalesce(@sql+',','select feeCate,')+'['+depart+']=sum(case depart when '''+depart+''' then fee end)' from #feebase group by depart
    set @sql=@sql+' from #feebase group by feeCate'
    exec(@sql)/*
    feeCate 财务部 懂事会 行政部
    差旅费 NULL NULL 200
    过路费 NULL 1000 200
    油费 200 NULL NULL
    */--删除测试
    drop table #feebase
      

  2.   

    --原始数据:#feebase
    create table #feebase(feeCate varchar(6),person varchar(4),depart varchar(6),fee int)
    insert #feebase
    select '差旅费','张三','行政部',200 union all
    select '过路费','李四','董事会',1000 union all
    select '油费','王五','财务部',200 union all
    select '过路费','马六','行政部',200declare @sql varchar(8000)select @sql=coalesce(@sql+',','select feeCate,')+'['+depart+']=sum(case depart when '''+depart+''' then fee else 0 end)' from #feebase group by depart
    set @sql=@sql+' from #feebase group by feeCate'
    exec(@sql)/*
    feeCate    财务部    懂事会    行政部
    差旅费 0 0 200
    过路费 0 1000 200
    油费 200 0 0
    */--删除测试
    drop table #feebase
      

  3.   

    首先非常感谢 Limpire 
    昨夜小楼 
    等 级:的回答:不过我还有一个疑问就是,feebase表格里,部门和费用项目的数量是动态的(部门有可以是若干个部门,费用项目也可以是若干个项目),不知道这个问题怎么解决?还希望帮助解决,再次表示感谢!!
      

  4.   

    再次非常感谢 Limpire  ,完全解决了这个问题,谢谢!!我是新手,我看我有多少分送多少分啊!!!!!
      

  5.   

    如果事先已经知道有些什么部门的话, 完全可以用PIVOTselect feeCate, 行政部, 董事会, 财务部, XXX
    from (select feeCate, depart, fee from feebase) f
    PIVOT (sum(fee)
    For depart
    IN (行政部, 董事会, 财务部, XXX)
    )t
    order by feeCate