首页 > 数据库技术 > 详细

oracle 使用函数 ROW_NUMBER() OVER(PARTITION BY 列 ORDER BY 列 排序 ),自关联日志表,将列数据转换为 行数据

时间:2021-05-28 19:30:11      阅读:23      评论:0      收藏:0      [点我收藏+]

需求关联日志,呈现以下效果,使用 ROW_NUMBER() OVER(PARTITION BY ) 函数 排序分组函数

ID
1
2
3
4
5

效果

1 2
2 3
3 4
4 5

日志表图 换床的日志记录
技术分享图片

结果表图 ,期待结果 换床前床号,换床后床号
技术分享图片

分析,可以通过关键词将患者分组后排序然后组成两个临时表,在临时表中添加 排序号 RNUM , SQL外层使用这个排序号 RNUM 添加关联规则本次序号 A的排序+1 关联到B表的下一行数据
sql 写法

SELECT T.PATIENT_ID,
       T.VISIT_ID,
       T.CHANGE_DATE_TIME,
       T.BED_NO 换床前床号,
       T.WARD_CODE,
       T1.WARD_CODE,
       T1.BED_NO 换床后床号
  FROM (SELECT A.PATIENT_ID,
               A.VISIT_ID,
               A.CHANGE_DATE_TIME,
               A.BED_NO,
               A.WARD_CODE,
               ROW_NUMBER() OVER(PARTITION BY A.PATIENT_ID, A.VISIT_ID ORDER BY A.CHANGE_DATE_TIME) RNUM
          FROM BED_CHANGE_INFO A) T,
       (SELECT B.PATIENT_ID,
               B.VISIT_ID,
               B.CHANGE_DATE_TIME,
               B.BED_NO,
               B.WARD_CODE,
               ROW_NUMBER() OVER(PARTITION BY B.PATIENT_ID, B.VISIT_ID ORDER BY B.CHANGE_DATE_TIME) RNUM
          FROM BED_CHANGE_INFO B) T1
 WHERE T.PATIENT_ID = T1.PATIENT_ID(+)
   AND T.VISIT_ID = T1.VISIT_ID(+)
   AND T.RNUM + 1 = T1.RNUM(+)
 ORDER BY T.PATIENT_ID, T.VISIT_ID, T.CHANGE_DATE_TIME;

oracle 使用函数 ROW_NUMBER() OVER(PARTITION BY 列 ORDER BY 列 排序 ),自关联日志表,将列数据转换为 行数据

原文:https://www.cnblogs.com/iullor/p/14822783.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!