首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

抢救!怎样将可变列转为行?

2013-09-05 
急救!!怎样将可变列转为行??一张病人费用表,含有以下字段:住院号(NO)、费用项目编号(CODE)、费用金额(COST)。

急救!!怎样将可变列转为行??
一张病人费用表,含有以下字段:住院号(NO)、费用项目编号(CODE)、费用金额(COST)。
其中每一个病人可能有若干种费用项目,并且费用项目是可重复的。详见下表:

住院号费用项目编号费用金额
ZY001010        30
ZY001055        60
ZY001055        40
ZY001068        50
ZY002011        30.2
ZY002047        68
ZY002055        80
ZY002019        55.5
ZY002019        63

现在要求统计出每个病人的每一项费用的金额汇总
以如下方式输出:

住院号010055068……
ZY0013010050……
ZY0020800……

列转行
[解决办法]
生成 select 语句的 pl/sql 块如下:


set serveroutput on
declare 
  cursor c1 is select distinct code from t1 order by code;
  v_sql varchar2(1024);
begin
  v_sql := 'select '
[解决办法]
chr(10)
[解决办法]
'no,'
[解决办法]
chr(10);
  for c1_result in c1 loop
    v_sql := v_sql
[解决办法]
'sum(case code when '''
[解决办法]
c1_result.code
[解决办法]
''' then cost else 0 end) c'
[解决办法]
c1_result.code
[解决办法]
','
[解决办法]
chr(10);
  end loop;
  v_sql := substr(v_sql, 0, length(v_sql) - 2);


  v_sql := v_sql
[解决办法]
chr(10)
[解决办法]
'from t1 group by no'
[解决办法]
chr(10)
[解决办法]
'order by no;';
  dbms_output.put_line(v_sql);
end;
/

热点排行