-- Start of DDL Script for Procedure SD_HOSPITAL.SP_ZY_ZY_BRLDTJ -- Generated 19-五月-2010 10:33:22 from SD_HOSPITAL@orcl CREATE OR REPLACE PROCEDURE sp_zy_zy_brldtj --病人流动统计(包含临时住院病人) ( pStartRq in Varchar2, PStartSj in Varchar2, pEndRq00 in Varchar2, PEndSj00 in Varchar2, PFLAG00 OUT Varchar2, pBQKSBZ0 in CHAR default '0', --2009.01.06 sechen 按病区或科室 0:病区 1:科室 as_TJFS00 IN CHAR --统计方式 0-全部, 1临时住院病人 ) AS -- MODIFICATION HISTORY -- Person Date Comments -- sechen 2009.01.04 新增此过程,由原来的SP_ZY_BRLDTJ改进 增加科室统计 -- yangy 2009.03.26 宁德市医院床日数不等于每天的期末在院人数 -- xuzw 2009.08.12 临时病人BQ_BRLDXX.YXBZ00=3,条件加以修改使临时病人能够统计出来(之前是YBBZ00='1' 且 住院号开头是F或者M) vStartrqsj Varchar2(20); VEndRqsj00 Varchar2(20); vprevtrq Varchar2(8); --开始日期的前一天 Vcounter number(5); vTMPRQ00 Varchar2(8); Vyyid00 xt_yyxx00.yyid00%type; Cursor C_YYBQBH is select bmbh00,bmmc00,bh0000 from bm_bmbm00 where bmxz00='9' and flag00='1' and czbz00 in ('0','1') order by bh0000; --2009.01.04 sechen 住院科室 bmxz00='0' Cursor C_YYKSBH is select bmbh00,bmmc00,bh0000 from bm_bmbm00 where bmxz00='0' and flag00='1' and czbz00 in ('0','1') order by bh0000; BEGIN Vcounter:=sf_bq_brldxx; commit; vStartRqsj:=pStartRq||pStartsj; vEndRqsj00:=pEndRq00||pEndSj00; vprevtrq:=to_char(to_date(pStartRq,'YYYYMMDD')-1,'YYYYMMDD'); delete bm_zhtj00_temp00 where Flag00='BQ_BRLDTJ'; select yyid00 into Vyyid00 from xt_yyxx00 where rownum=1; if pEndRq00 is null then --2009.01.04 sechen 按病区 pBQKSTJ0=0--if begin if pBQKSBZ0='0' then for bm in C_YYBQBH loop insert into bm_zhtj00_temp00 (flag00,bmmc00,bmbh00,startd,stopda,startt,stopti) VALUES ('BQ_BRLDTJ',bm.bmmc00,bm.bmbh00,pStartRq,pEndRq00,pStartSj,pEndSj00); --在院人数 qsrq<=endrq and (jsrq is null or jsrq>=endrq) Update bm_zhtj00_temp00 set temp01=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.BQH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=pStartRq and BQJSRQ>pStartRq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' AND ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00<>'3' and brzt00<>'3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))and b.cyrq00 is null and brzt00<>'3') where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区收治人数,以住院收费处的为准 Update bm_zhtj00_temp00 set temp02=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.BQH000=bm.bmbh00 and qszt00 in ('新入') --and yxbz00='1' and qsrq00=pStartRq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区出院登记人数 Update bm_zhtj00_temp00 set temp03=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE JSZT00='出院' AND a.BQH000=bm.bmbh00 --and yxbz00='1' and jsrq00=pStartrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转入人数 Update bm_zhtj00_temp00 set temp04=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE QSZT00 in ('转入') AND a.BQH000=bm.bmbh00 --and yxbz00='1' and QSRQ00 =pStartrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转出人数 Update bm_zhtj00_temp00 set temp05=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE JSZT00='转出' AND a.BQH000=bm.bmbh00 --and yxbz00='1' AND JSRQ00=pStartrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3'))) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --实际开放床位数 Update bm_zhtj00_temp00 set temp06=(SELECT SYCW00 from BM_BMBM00 where BMBH00=bm.bmbh00) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --空床数 Update bm_zhtj00_temp00 set temp07=abs(nvl(temp06,0)-nvl(temp01,0)),temp08=0 where flag00='BQ_BRLDTJ' and abs(nvl(temp06,0))>=abs(nvl(temp01,0)); --加床数 Update bm_zhtj00_temp00 set temp08=abs(nvl(temp01,0)-nvl(temp06,0)),temp07=0 where flag00='BQ_BRLDTJ' and abs(nvl(temp01,0))>abs(nvl(temp06,0)); end loop; --2009.01.06 sechen elsif pBQKSBZ0='1' then for bm in C_YYKSBH loop insert into bm_zhtj00_temp00 (flag00,bmmc00,bmbh00,startd,stopda,startt,stopti) VALUES ('BQ_BRLDTJ',bm.bmmc00,bm.bmbh00,pStartRq,pEndRq00,pStartSj,pEndSj00); --在院人数 qsrq<=endrq and (jsrq is null or jsrq>=endrq) Update bm_zhtj00_temp00 set temp01=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=pStartRq and BQJSRQ>pStartRq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))and b.cyrq00 is null and brzt00<>'3') where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区收治人数,以住院收费处的为准 Update bm_zhtj00_temp00 set temp02=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and qszt00 in ('新入') --and yxbz00='1' and qsrq00=pStartRq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区出院登记人数 Update bm_zhtj00_temp00 set temp03=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and JSZT00='出院' --AND yxbz00='1' and jsrq00=pStartrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转入人数 Update bm_zhtj00_temp00 set temp04=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and QSZT00 in ('转入') --AND yxbz00='1' and QSRQ00 =pStartrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转出人数 Update bm_zhtj00_temp00 set temp05=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and JSZT00='转出' --AND yxbz00='1' AND JSRQ00=pStartrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --实际开放床位数 Update bm_zhtj00_temp00 set temp06=(SELECT SYCW00 from BM_BMBM00 where BMBH00=bm.bmbh00) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --空床数 Update bm_zhtj00_temp00 set temp07=abs(nvl(temp06,0)-nvl(temp01,0)),temp08=0 where flag00='BQ_BRLDTJ' and abs(nvl(temp06,0))>=abs(nvl(temp01,0)); --加床数 Update bm_zhtj00_temp00 set temp08=abs(nvl(temp01,0)-nvl(temp06,0)),temp07=0 where flag00='BQ_BRLDTJ' and abs(nvl(temp01,0))>abs(nvl(temp06,0)); end loop; end if; --2009.01.04 sechen 按病区 pBQKSTJ0=0--if begin else --2009.01.04 sechen 按病区 pBQKSTJ0=0--if begin if pBQKSBZ0='0' then for bm in C_YYBQBH loop insert into bm_zhtj00_temp00 (flag00,bmmc00,bmbh00,startd,stopda,startt,stopti) VALUES ('BQ_BRLDTJ',bm.bmmc00,bm.bmbh00,pStartRq,pEndRq00,pStartSj,pEndSj00); --期初人数 qsrq<=endrq and (jsrq is null or jsrq>=endrq) Update bm_zhtj00_temp00 set temp01=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.BQH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=vprevtrq and BQJSRQ>vprevtrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区收治人数,以住院收费处的为准 Update bm_zhtj00_temp00 set temp02=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.BQH000=bm.bmbh00 and qszt00 in ('新入') --and yxbz00='1' and qsrq00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区出院登记人数 Update bm_zhtj00_temp00 set temp03=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE JSZT00='出院' AND a.BQH000=bm.bmbh00 --and yxbz00='1' and jsrq00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转入人数 Update bm_zhtj00_temp00 set temp04=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE QSZT00='转入' AND a.BQH000=bm.bmbh00 --and yxbz00='1' AND QSRQ00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转出人数 Update bm_zhtj00_temp00 set temp05=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE JSZT00='转出' AND a.BQH000=bm.bmbh00 --and yxbz00='1' AND JSRQ00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --期末人数 qsrq<=endrq and (jsrq is null or jsrq>=endrq) Update bm_zhtj00_temp00 set temp06=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.BQH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=pEndrq00 and BQJSRQ>pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; if Vyyid00='228443' then vTMPRQ00:=pStartRq; WHILE vTMPRQ00<=pEndRq00 LOOP SELECT COUNT (DISTINCT a.ZYID00) into Vcounter FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.BQH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=vTMPRQ00 and BQJSRQ>vTMPRQ00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z'))); update bm_zhtj00_temp00 set temp07=nvl(temp07,0)+Vcounter where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; vTMPRQ00:=to_char(to_date(vTMPRQ00,'YYYYMMDD')+1,'YYYYMMDD'); END LOOP; end if; end loop; --2009.01.06 sechen elsif pBQKSBZ0='1' then for bm in C_YYKSBH loop insert into bm_zhtj00_temp00 (flag00,bmmc00,bmbh00,startd,stopda,startt,stopti) VALUES ('BQ_BRLDTJ',bm.bmmc00,bm.bmbh00,pStartRq,pEndRq00,pStartSj,pEndSj00); --期初人数 qsrq<=endrq and (jsrq is null or jsrq>=endrq) Update bm_zhtj00_temp00 set temp01=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=vprevtrq and BQJSRQ>vprevtrq and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区收治人数,以住院收费处的为准 Update bm_zhtj00_temp00 set temp02=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and qszt00 in ('新入') --and yxbz00='1' and qsrq00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --病区出院登记人数 Update bm_zhtj00_temp00 set temp03=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and JSZT00='出院' --AND yxbz00='1' and jsrq00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转入人数 Update bm_zhtj00_temp00 set temp04=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and QSZT00='转入' --AND yxbz00='1' AND QSRQ00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --转出人数 Update bm_zhtj00_temp00 set temp05=(SELECT COUNT ( a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 and JSZT00='转出' --AND yxbz00='1' AND JSRQ00 between pStartrq and pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; --期末人数 qsrq<=endrq and (jsrq is null or jsrq>=endrq) Update bm_zhtj00_temp00 set temp06=(SELECT COUNT (DISTINCT a.ZYID00) FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=pEndrq00 and BQJSRQ>pEndrq00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z')))) where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; if Vyyid00='228443' then vTMPRQ00:=pStartRq; WHILE vTMPRQ00<=pEndRq00 LOOP SELECT COUNT (DISTINCT a.ZYID00) into Vcounter FROM BQ_BRLDXX a,zy_brxxb0 b WHERE a.KSH000=bm.bmbh00 --and yxbz00='1' and a.qszt00 in ('新入','转入') and a.QSRQ00<=vTMPRQ00 and BQJSRQ>vTMPRQ00 and a.zyid00=b.zyid00 AND ((as_TJFS00='0' and ((yxbz00='1') or (yxbz00='3')) ) OR (as_TJFS00='1' and yxbz00='3' and (upper(SUBSTR(B.ZYH000,1,1)) BETWEEN 'A' AND 'Z'))); update bm_zhtj00_temp00 set temp07=nvl(temp07,0)+Vcounter where flag00='BQ_BRLDTJ' and bmbh00=bm.bmbh00; vTMPRQ00:=to_char(to_date(vTMPRQ00,'YYYYMMDD')+1,'YYYYMMDD'); END LOOP; end if; end loop; end if; --2009.01.04 sechen 按病区 pBQKSTJ0=0--if begin end if; PFLAG00:='BQ_BRLDTJ'; COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20010, '数据没有找到!*'); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20020, substrb(NVL(SQLERRM, '原因不明出错')||'!*',1,220)); END SP_ZY_ZY_BRLDTJ; / -- End of DDL Script for Procedure SD_HOSPITAL.SP_ZY_ZY_BRLDTJ