急救!!怎样将可变列转为行??
一张病人费用表,含有以下字段:住院号(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;
/