Oracle数据库练习题

综合练习题1-1

   

  1. 写一个sql,从这个dw.sq_grbm中取值,输出格式:grbm。

要求取值结果以当前年月日开头+sequence。如:20140412-100001

select to_char(sysdate,'yyyymmdd')||'-'||dw.sq_grbm.nextval grbm 

from dual

  1. 查询姓张的病人姓名和出生年份。输出格式:xm,csnf

select a.xm, to_char(a.csrq, 'yyyy') csnf

  from dw.per_natl a

 where a.xm like '张%'

  1. 查询药品的平均单价,输出格式:pjdj

select trunc(avg(a.dj),2) pjdj

   from dw.medi_item a

  where a.ylxmlb = '1'

  1. 查询发生过费用的病人总人数,输出格式:zrs

select count(distinct(grbm)) zrs

  from dw.patient_script_genl

  1. 查询2000年以后(不包含2000年出生的)出生的病人姓名。输出格式:xm

select xm 

  from dw.per_natl 

 where csrq>to_date('20001231','yyyymmdd');

  1. 查询没有被使用过的医疗项目编码和名称。输出格式:ylxmbm,ylxmmc

select a.ylxmbm, a.ylxmmc

  from dw.medi_item a

 where not exists (select b.ylxmbm

          from dw.patient_script_detl b

         where a.ylxmbm = b.ylxmbm)

  1. 查询与自己的科室负责人同名的医师的编码和姓名。输出格式:ysbm,ysxm

select a.ysbm,a.xm ysxm

  from dw.doctor a,dw.doctor b

 where a.ksfzr = b.ysbm

   and a.xm = b.xm 

   and a.ysbm<>b.ysbm

  1. 查询未结算费用凭单的总金额、自付金额和报销金额。输出格式:zje_wjs,zfje_wjs,bxje_wjs

select sum(nvl(zje,0)) zje_wjs,

       sum(nvl(zfje,0)) zfje_wjs,

       sum(nvl(bxje,0)) bxje_wjs

  from dw.patient_script_genl

 where jshid is null

  1. 新增科室,科室编码为’999’,科室名称为’核磁共振室’。

insert into dw.dept (ksbm,ksmc) values('9999','核磁共振室') 

  1. 查询2012年的平均报销金额。输出格式:pjbxje_2012

select round(avg(bxje),2) pjbxje_2012

  from dw.patient_script_genl a

 where a.fyfsrq >= to_date('20120101', 'yyyymmdd')

   and a.fyfsrq < to_date('20130101', 'yyyymmdd') 

  1. 查询重名的病人姓名及该姓名重名的人数。输出格式:xm,cmrs

select xm, count(*) cmrs

  from dw.per_natl 

 group by xm 

having count(*) > 1 

  1. 查询总报销金额大于100元的病人个人编码和姓名。输出格式:grbm,xm

select distinct a.grbm, a.xm

  from dw.per_natl a,

       dw.patient_script_genl b

 where a.grbm = b.grbm

 group by a.grbm, a.xm

having sum(b.bxje) > 100   

  1. 查询使用医疗项目数目最多的费用凭单编码,假设数目最多的凭单只有一个。输出格式:fyid   

select fyid

  from (select fyid, count(distinct ylxmbm) sl

          from dw.patient_script_detl

         group by fyid

         order by sl desc) t

 where rownum = 1   

  1. 删除没有发生过费用的病人信息。(先备份,备份表存放在si0001用户下,再根据备份删除)   

create table si0001.per_natl_free

as 

select *

  from dw.per_natl a

 where not exists(select '' from dw.patient_script_genl b where a.grbm = b.grbm);

 

delete from dw.per_natl a

 where exists (select '' from si0001.per_natl_free b where a.grbm = b.grbm)

   and not exists (select '' from dw.patient_script_genl b where a.grbm = b.grbm);

  1. 将高于平均价的药品的价格降低10%。(先备份,备份表存放在si0001用户下,再更新)    

create table si0001.medi_natl_above_avg

as 

select *

  from dw.medi_item;

update dw.medi_item a

   set dj = dj * 0.9

 where dj > (select avg(dj)

               from dw.medi_item 

              where ylxmlb = '1')

   and ylxmlb = '1'

   and exists(select 'x' from si0001.medi_natl_above_avg where ylxmbm=a.ylxmbm );    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值