日期:2014-05-17  浏览次数:20553 次

请教大侠我想把表中某一列的值作为列,进行另一列内容的总计统计,这个SQL 怎么写?两列的值都不是固定的,是根据输入动态变化的,谢谢了!
例如表内容是:
费别    金额      医生
挂号费 300.0000  医生甲
放射费 600.0000  医生甲
治疗费 200.0000  医生乙
挂号费 300.0000  医生乙
西药费 40.0000   医生丙
中药费 30.0000   医生丙
治疗费 200.0000  医生丙
治疗费 200.0000  医生丁
...
其中费别和医生的值都不是固定的,都是动态变化的,
希望改成按医生统计每一项费别的金额

如下所示:

费别     医生甲  医生乙  医生丙  医生J ...
挂号费    300     300        0     0
放射费    600     0          0     0
治疗费    0       200        200   200
西药费    0       0          40    0
中药费    0       0          30    0
...

请问怎么写这个SQL的存储过程?

谢谢了!
------解决方案--------------------
动态行转列啊!!!论坛里太多了!!!
搜搜吧!!!
------解决方案--------------------
http://bbs.csdn.net/topics/390296728
------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (费别 nvarchar(6),金额 numeric(7,4),医生 nvarchar(6))
insert into [TB]
select '挂号费',300.0000,'医生甲' union all
select '放射费',600.0000,'医生甲' union all
select '治疗费',200.0000,'医生乙' union all
select '挂号费',300.0000,'医生乙' union all
select '西药费',40.0000,'医生丙' union all
select '中药费',30.0000,'医生丙' union all
select '治疗费',200.0000,'医生丙' union all
select '治疗费',200.0000,'医生丁'

select * from [TB]


declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 医生 from tb group by 医生
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(金额) for 医生 in (' + @sql + ')) b')

/*
费别     医生丙                                     医生丁                                     医生甲                                     医生乙
------ --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
放射费    NULL