时间列名:TTIME 处理列名:HANDLE  人数:NUMB 出车情况:CONDITION 医院名称:UNIT这个列里面是可以添加的
处理列里面有入院  转院  留观 离院..
报表做成是:
医院名称  出诊次数  接回人数   空车次数  入院  转院  留观 离院  ..
  XX        XX       XX         XX      XX    XX   XX   XX  ..
  XX        XX       XX         XX      XX    XX   XX   XX  ..
  XX        XX       XX         XX      XX    XX   XX   XX  ..
  XX        XX       XX         XX      XX    XX   XX   XX  ..
  XX        XX       XX         XX      XX    XX   XX   XX  ..
  XX        XX       XX         XX      XX    XX   XX   XX  ..
  ..        ..       ..         ..      ..    ..   ..   ..  ..
总计         XX       XX         XX      XX    XX   XX   XX  ..出诊次数是一共在时间内多少条记录.
接回人数是出车情况列为不是空车的其它记录中人数列内总共数.
空车次数是时间内.出国情况列里为空车的记录数.
处理列中各种处理如:入院  转院  留观 离院..等为各种的人数列中总和
还有就是这个项的总计

解决方案 »

  1.   

     type ResultData is ref cursor;
    procedure calculate(ret out ResultData)
    is
    strSQL1 varchar(2000);
    strSQL2 varchar(2000);
    strSQL varchar(4000);
    Cursor handllist is select distinct handle from TestPLSQL;
    temp_handle varchar2(5);
    begin
    strSQL1:='select UNIT';
    strSQL2:='select t.UNIT,t.cnb,t.cna,s.cnc 
                from (select a.unit,cnb,cna from (select unit,sum(numb) cna from TestPLSQL group by unit) a,
                                                 (select unit,count(*) cnb from TestPLSQL group by unit) b
                                           where a.unit = b.unit(+)) t,
                     (select unit,count(*) cnc from TestPLSQL where condition = '||chr(39)||'空车'||chr(39)||' group by unit) s
    where t.unit = s.unit(+)';
    open handllist;
    loop
    fetch handllist into temp_handle;
    exit when handllist%notfound;
    strSQL1:=strSQL1||',sum(decode(t1.handle,'||chr(39)||temp_handle||chr(39)||',t1.NUMB,0)) "'
                  ||temp_handle||'"';
    end loop;
    strSQL1:=strSQL1||' from TestPLSQL t1 group by UNIT';
    close handllist;strSQL:= 'select n.*,m.cnb 出诊次数,m.cna 接到人数,m.cnc 空车次数 from ('||strSQL1||') n,('||strSQL2||') m '||' where n.UNIT = m.UNIT(+)';open ret for strSQL;end calculate;
    将TestPLSQL这个表名换成你的表名。
      

  2.   

    哦,最后一个总和忘记求了,不过你可以自己用union select '总计', sum(各列) from strSQL就行