当前位置: 代码迷 >> Oracle认证考试 >> 急求以sql语句。谢谢
  详细解决方案

急求以sql语句。谢谢

热度:1375   发布时间:2013-02-26 00:00:00.0
急求以sql语句。多谢。
oracle 有如下几张表: 

病人表(T_PATIENT),用来记录病人的基本情况: 
  t_id 主键 
  t_name 病人姓名 
  t_address 病人籍贯 
  t_input_date 录入时间 

复诊表(T_MID),用于记录病人的复诊情况,每复诊一次就插入一条记录: 
  m_id 主键 
  t_id 病人表主键 
  m_address 病人复诊地区 
  m_state 病人复诊的状态,1为死亡,2为停止复诊,3为转诊到其他地区 
  m_mid_date 病人复诊日期,如果病人死亡或者转诊到其他地区,则为空 
  m_trans_date 病人转诊到其他地区的时间,如果没有转诊,则为空 
  m_death_date 病人死亡日期,如果没有死亡则为空 
  m_mid_or_trans_or_death_date 用于记录病人复诊、转诊或死亡日期 
  r_id 转诊表主键,如果病人没有转诊,则为空 

转诊表(T_TRANS),用于记录病人转诊的信息,比如从A地区转入B地区 
  r_id 转诊表主键 
  t_id 病人表主键 
  r_yaddress 病人原治疗地区 
  r_toaddress病人转入地区  

病人最新状态表(T_STATE),用于记录病人的状态,如病人当前治疗地区、病人的复诊状态: 
  s_id 主键 
  t_id 病人表主键 
  s_cur_address 病人当前治疗地区 
  s_cur_state 病人目前状态,1为死亡,2为停止复诊,3为转到其他地区 
  s_last_mid_date 病人最近一次复诊或转到其他地区或死亡日期 

业务简介: 
  如果病人转诊,那么需要先手工填写病人的转诊表,然后在复诊表中填写一条该病人复诊状态为“转诊到其他地区”的记录,病人真正转出的时间是复诊表的转诊时间。 
  每次添加修改或者删除基本信息表、复诊表的记录,我都会用触发器来更新病人最新状态表(T_STATE),用于保证病人状态的正确性
  新增病人不包括转入的。转出的也不需要扣除。同一个人转入转出多次按最后一次来算。最新状态表中的“最新”是指,不新的将会被更新。最新状态表和基本信息表是一对一的关系。。 

现在我需要这样一个统计sql,这个sql将会在每月5号自动执行: 
按病人表(T_PATIENT)的病人籍贯t_address字段来统计(group by t_address): 

该地区病人的总人数、2009年9月份该地区新增人数,2009年9月该地区死亡人数、2009年9月份从其他地区转入到该地区的人数,2009年9月份该地区停止复诊的人数。 
  


------解决方案--------------------------------------------------------
学习下!

------解决方案--------------------------------------------------------
目前只想到一个傻方法,写5个子查询,以地区为条件内连接。
方法比较傻,仅供LZ参考
------解决方案--------------------------------------------------------
根据T_STATE表来进行统计可否?


SQL code
select sum(num) '总人数', a.*from(  select s_cur_address,to_char(add_months(trunc(s_last_mid_date),-1),'yyyymm'),count(*) num   from T_STATE   group by s_cur_address,to_char(add_months(trunc(s_last_mid_date),-1),'yyyymm'))a;
------解决方案--------------------------------------------------------
学习学习
  相关解决方案