首页 > 解决方案 > 在 Oracle 中更新一组行的字段库

问题描述

我有一个如表(图像)所示的数据。患者的首次就诊应在New_Review列下标记为“新” 。同一患者的其他就诊应在同一栏中标记为“审查”。

还帮助我如何在另一列中将患者对专业化的首次访问标记为“新”。以及稍后对同一专业的同一患者的其他访问作为“审查”

谢谢你。

Oracle 表数据

标签: oraclesql-update

解决方案


您只能在数据库视图中定义列,如下面的示例所示

create view v as 
select 
  REGNO, VISITDATE, SPECIALISATION,DOCID,
  /* first visit of an RegNo */
  case when row_number() over (partition by REGNO order by VISITDATE, DOCID) = 1 
       then 'New' else 'Review' end as New_Review,
  /* first visit of an RegNo for Specialisation */
  case when row_number() over (partition by REGNO, SPECIALISATION order by VISITDATE, DOCID) = 1 
       then 'New' else 'Review' end as New_Review_Spec       
from tab

这有两个好处

首先,定义始终是一致的,并且不需要应用程序逻辑来维护它。

其次,使用的方法ROW_NUMBER也可以处理您在同一天进行多次访问的情况。参见 usedORDER BY子句,其中还有DOCID用于控制同一日期访问的顺序。

请注意,在partition by子句中,您使用要为其定义第一次访问的列。在你的情况下REGNO orREGNOSPECIALISATION

row_numberassing 的序号开始1,所以和你比较有1你的第一次访问


推荐阅读