《数据库入门》练习题参考答案
1、查询所有药品的医疗项目编码、名称和单价,按照单价的降序排序。 select ylxmbm,ylxmmc,dj from dw.medi_item where ylxmlb='1' order by dj desc; 运行结果:
YLXMBM 100003 100002 100020 100001 100019
2、查询与’ 安娜’医师在同一个科室工作的医师姓名。 select b.xm
from dw.doctor a,dw.doctor b
where a.ksbm=b.ksbm and a.xm='安娜' and b.xm<>’安娜’; 运行结果: B.XM 朱丽叶 安娜
3、查询未结算的FYID及其总费用、报销费用和自付费用。 select fyid,zje,bxje,zfje from dw.patient_script_genl where jshid is null; 运算结果:
1
YLXMMC 庆大霉素 利君沙 苄星青霉素 阿莫西林 苄星青霉素 DJ 20.80 19.10 18.20 15.30 14.30 FYID 20120514008 20130106110
ZJE 162.70 33.60 BXJE 158.02 30.74 ZFJE 4.68 2.86 4、查询使用过’ 阿莫西林’药品的病人个人编码和姓名。 select grbm,xm from dw.per_natl
where grbm in (select grbm
from dw.medi_item a,dw.patient_script_detl b,
dw.patient_script_genl c
where ylxmmc='阿莫西林'and a.ylxmbm=b.ylxmbm and
b.fyid=c.fyid);
运行结果:
GRBM 320106198907012569 411502194703160816
5、查询2012年的平均报销金额。 select avg(bxje)
from dw.patient_script_genl
where to_char(fyfsrq,'YYYY.MM.DD') between '2012.01.01'and '2012.12.31'; 运行结果: AVG(BXJE) 154.31
6、查询GRBM是’ 320106198907012569’的病人的姓名、出生日期、家庭住址和性别(其中性别为’1’表示男性,性别为’2’表示女性,请将数据库中的’1’和’2’转换为’男’和’女’;CDRQ以’YYYY.MM.DD’的形式显示)。
select xm,to_char(csrq,'YYYY.MM.DD') CSRQ, decode(xb,'1','男','2','女') XB
2
XM 王熙凤 唐僧 from dw.per_natl
where grbm='320106198907012569'; 运算结果 XM 王熙凤
7、查询重名的病人姓名及该姓名重名的人数。 select xm,count(*) from dw.per_natl group by xm having count(xm)>1; 运行结果:
XM 赵云
8、查询使用了fyid为’20120120001’使用的全部医疗项目的费用凭单编码。 select distinct a.fyid
from dw.patient_script_detl a where not exists (select 1
from dw.patient_script_detl b
where b.fyid='20120120001' and not exists (select 2
from dw.patient_script_detl c
where b.ylxmbm=c.ylxmbm and a.fyid=c.fyid)); 或者:
select distinct a.fyid
from dw.patient_script_detl a where not exists ((select ylxmbm
from dw.patient_script_detl
3
CSRQ 1989.07.01 XB 女 COUNT(*) 2 where fyid='20120120001') minus
(select ylxmbm
from dw.patient_script_detl b where a. fyid=b.fyid));
运行结果:
FYID 20120120001 20130109108
15、查询报销费用最多的病人的个人编号。 select grbm
from dw.patient_settle group by grbm
having sum(nvl(bxje,0)) >= all (select sum(nvl(bxje,0)) from dw.patient_settle group by grbm);
select grbm
from dw.patient_settle group by grbm
having sum(bxje) >= (select max(sum(bxje)) from dw.patient_settle group by grbm);
运算结果: GRBM 320106198907012569
4
16、查询自付金额最多的科室编码。 17、查询单价最贵的药品编码、名称和单价。 select ylxmbm,ylxmmc,dj from dw.medi_item
where ylxmlb='1' and dj = (select max(dj) from dw.medi_item where ylxmlb='1'); select ylxmbm, ylxmmc,dj from dw.medi_item where ylxmlb = '1'
and ylxmbm not in (select a.ylxmbm
from dw.medi_item a, dw.medi_item b
where a.ylxmlb='1' and b.ylxmlb='1' and a.dj < b.dj);
ylxmbm 100003
ylxmmc 庆大霉素 18、将所有诊疗项目的报销比例提高5%,如果报销比例提高5%后超过100%,则该诊疗项目的报销比例维持原值。 update dw.medi_item set bxbl=bxbl+0.05
where ylxmlb=’2’ and bxbl<=0.95;
21、用SQL实现下列需求:
病人“白龙马”有两次治疗记录,
第一次:“血常规”1次,“单脏器检查”1次,“阿莫西林”2盒,本次治疗由内科的葛朗台医师开具的费用凭单;
第二次:“利君沙”3盒,“诊查费”1次,本次治疗由外科的哈利波特医师开具的费用凭单。
5
请将病人的两次治疗记录分别记录在dw.patient_script_detl和dw.patient_script_genl中,然后进行结算(fyid、jshid和fyfsrq自行确定),最终要求显示结算结果。
insert into dw.patient_script_detl(fyid,sxh,ylxmbm,sl,dj,zje,bxje,zfje) values ('20130411001',1,'200005',1,15,1*15,12,3);
insert into dw.patient_script_detl(fyid,sxh,ylxmbm,sl,dj,zje,bxje,zfje) values('20130411001',2,'200008',1,150,1*150,1*150*0.8,1*150*0.2); ………..
insert into dw.patient_script_genl (fyid,fyfsrq,ysbm,ksbm,grbm,zje,bxje,zfje) select '20130411001',to_date(to_char(sysdate,'yyyy.mm.dd') ,'yyyy.mm.dd'), '015','0001','610122193305225413',sum(zje),sum(bxje),sum(zfje)
from dw.patient_script_detl where fyid='20130411001'; commit;
第二次:。。。。。。。。 update dw.patient_script_genl set jshid='1177'
where grbm='610122193305225413' and jshid is null; insert into dw.patient_settle(jshid,zje,bxje,zfje,grbm)
select '1177',sum(zje),sum(bxje),sum(zfje),'610122193305225413' from dw.patient_script_genl
where grbm='610122193305225413' and jshid =’1177’; commit;
注意:一旦有SQL执行出现问题,需要rollback
6