zoukankan      html  css  js  c++  java
  • oracle 使用函数 ROW_NUMBER() OVER(PARTITION BY 列 ORDER BY 列 排序 ),自关联日志表,将列数据转换为 行数据

    需求关联日志,呈现以下效果,使用 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;
    
  • 相关阅读:
    session笔记-韩顺平
    带宽
    cookie-韩顺平
    分层模式开发+MVC模式开发--韩顺平雇员数据库管理
    韩顺平-雇员管理系统-学习小结
    常用的PHP数据库操作方法(MYSQL版)
    使用Three.js 基本组件以及流程
    three.js 相机
    多线程的操作与数据绑定
    矩阵-
  • 原文地址:https://www.cnblogs.com/iullor/p/14822783.html
Copyright © 2011-2022 走看看