当前位置: 代码迷 >> Sql Server >> 行列转换有关问题!
  详细解决方案

行列转换有关问题!

热度:45   发布时间:2016-04-24 21:59:04.0
行列转换问题!!!
     
时间刻度 医院等级    补偿人次    费用总额       可报总额    补偿总额
2012  2级医院     415.00 1164.83   11887.31  84706.70
2012  3级医院     1998.00 16862.68 10074.84 95725.30

2013  2级医院      415.00 11578.83 11887.31 84076.70
2013  3级医院     1998.00 16962.68 15074.84 95725.30

将以上数据转换成下面格式:

医院等级     统计指标    2012年      2013年
2级医院  补偿人次 4159.00     4159.00
2级医院  费用总额 1578.83     1578.83
2级医院  可报总额 1887.31     1887.31
2级医院  补偿总额 8376.70     8376.70
3级医院  补偿人次 1998.00     1998.00
3级医院     费用总额 1962.68     1962.68
3级医院  可报总额 1004.84     1004.84
3级医院     补偿总额 9725.30     9725.30

只有一年数据的时候, 我能实现,  现在几年的实现不了了。。。。  求指点。

------解决方案--------------------
用PIVOT运算符吧
------解决方案--------------------
create table ROWTOCOUNT
(
时间刻度 VARCHAR(10),
医院等级 VARCHAR(20),
补偿人次  FLOAT(8),
费用总额   FLOAT(8),
可报总额 FLOAT(8),
补偿总额 FLOAT(8)
)
INSERT INTO ROWTOCOUNT
SELECT '2012','2级医院' , 415.00,1164.83,11887.31,84706.70
UNION ALL
SELECT '2012','3级医院',1998.00 ,16862.68 ,10074.84 ,95725.30 
UNION ALL
SELECT '2013','2级医院',415.00 ,11578.83, 11887.31,84076.70
UNION ALL
SELECT '2013','3级医院',1998.00,16962.68,15074.84 ,95725.30 




with #a
 as
(
select 时间刻度,医院等级,统计指标='补偿人次',年份=补偿人次
 from ROWTOCOUNT
union all
select 时间刻度,医院等级,统计指标='费用总额',年份=费用总额
 from ROWTOCOUNT
union all
select 时间刻度,医院等级,统计指标='可报总额',年份=可报总额
 from ROWTOCOUNT
union all
select 时间刻度,医院等级,统计指标='补偿总额',年份= 补偿总额
 from ROWTOCOUNT
 )


select 医院等级,
  统计指标,
  MAX(case 时间刻度 when '2012' then 年份 end) '2012年',
  MAX(case 时间刻度 when '2013' then 年份 end) '2013年'
  from #a
  group by 医院等级,统计指标
  order by 医院等级

  相关解决方案