有如下一个表格 feebase
---------------------------------------
feeCate | person | depart | fee |
-----------------------------------------------------------------
差旅费 | 张三 | 行政部 | 200 |
------------------------------------
过路费 | 李四 | 董事会 | 1000 |
-----------------------------------
油费 | 王五 | 财务部 | 200 |
------------------------------------
过路费 |马六 | 行政部 | 200 |
------------------------------------
希望能用一条sql语句 或 存储过程 实现输出以下表格( 其中 费用项目 和 部门 数量不固定
------------------------------------
| 行政部 | 董事会 | 财务部 |
------------------------------------
差旅费 | 200 | | |
------------------------------------
过路费 | 200 | 1000 | |
--------------------------------------------------------------
油费 | | | 200 |
-------------------------------------
能解答者,万分感激! 求高手指点!!!!!!!!!!!!!
---------------------------------------
feeCate | person | depart | fee |
-----------------------------------------------------------------
差旅费 | 张三 | 行政部 | 200 |
------------------------------------
过路费 | 李四 | 董事会 | 1000 |
-----------------------------------
油费 | 王五 | 财务部 | 200 |
------------------------------------
过路费 |马六 | 行政部 | 200 |
------------------------------------
希望能用一条sql语句 或 存储过程 实现输出以下表格( 其中 费用项目 和 部门 数量不固定
------------------------------------
| 行政部 | 董事会 | 财务部 |
------------------------------------
差旅费 | 200 | | |
------------------------------------
过路费 | 200 | 1000 | |
--------------------------------------------------------------
油费 | | | 200 |
-------------------------------------
能解答者,万分感激! 求高手指点!!!!!!!!!!!!!
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
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
昨夜小楼
等 级:的回答:不过我还有一个疑问就是,feebase表格里,部门和费用项目的数量是动态的(部门有可以是若干个部门,费用项目也可以是若干个项目),不知道这个问题怎么解决?还希望帮助解决,再次表示感谢!!
from (select feeCate, depart, fee from feebase) f
PIVOT (sum(fee)
For depart
IN (行政部, 董事会, 财务部, XXX)
)t
order by feeCate