Oracle多行记录合并处理

1:效果如下图所示:

表T1:

CREATE TABLE T1
(
  WEEKWORKID VARCHAR2(20) ,
  DD VARCHAR2(20)
)

表T2

CREATE TABLE T2
(
  WEEKWORKID VARCHAR2(20) ,
  NR VARCHAR2(20)
)

SQL语句:

select t2.weekworkid,t2.nr,T.dd
from t2
left join (
  -- 4筛选结果集
  select weekworkid,max(substr(dd,2))dd
  from(
    -- 3使用sys_connect_by_path生成结果集
    select weekworkid,sys_connect_by_path(dd,‘,‘)dd
    from(
      -- 2创建子节点与父节点
      select weekworkid,dd,weekworkid||rn rchild,weekworkid||(rn-1)rfather
      from(
        -- 1对记录添加序号
        select t1.weekworkid,t1.dd,row_number()
            over(partition by t1.weekworkid order by t1.dd) rn
        from t1
        where t1.weekworkid in(
          select weekworkid from t2
        )
      )
    )connect by prior rchild = rfather start with rfather like ‘%0‘
  ) group by weekworkid
)T on t2.weekworkid=T.weekworkid
order by weekworkid

运行结果:

时间: 2024-12-17 08:27:51

Oracle多行记录合并处理的相关文章

Oracle多行记录合并的几种方法

今天正好遇到需要做这个功能,顺手搜了一下网络,把几种方法都列出来,方便以后参考. 1 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default Comments ------- ------------ -------- ------- -------- COUNTRY VARCHAR2(20) Y CITY VARCHAR2(20) Y SQL> select * from test; COUNTRY CITY ---

oracle ORA_ROWSCN 行记录的更新时间

在这介绍两个oracle 10G开始提供的一个伪列ORA_ROWSCN,它又分为两种模式一种是基于block,这是默认的模式,还有一种是基于row上,这种模式只能在建里表时指定ROWDEPENDENCIES,不可以通过后期的alter table ,同时会给数据库带来性能负载每个Block在头部是记录了该block最近事务的SCN的,所以默认情况下,只需要从block头部直接获取这个值就可以了,不需要其他任何的开销,Oracle就能做到这一点.但是这明显第一种模式是scn是不准确的,因为不可能每

hive concat_w实现将多行记录合并成一行

建表如下: # 创建商品与促销活动的映射表 hive -e "set mapred.job.queue.name=pms; set hive.exec.reducers.max=32; set mapred.reduce.tasks=32; drop table if exists product_promotion; create table product_promotion(product_id bigint, promotion_id String); insert into table

SQL SERVER里行记录合并

在表PO中有以下列:PO#,Styel#,Color以及Quantity,其中同一个PO#可能会有不同的Style#,同一个PO#与Style#可能有不同的Color,现在要求是:把PO#与Style#相同的记录的Color与Quantity算出来,插入到一个新表中去,如:PO#        Style#        Color        QuantityA              01              Red          10A              01    

Oracle 多行合并一行 方法

假如有如下表,其中各个i值对应的行数是不定的 Sql代码 SQL> select * from t; I A          D ---------- ---------- ------------------- 1 b          2008-03-27 10:55:42 1 a          2008-03-27 10:55:46 1 d          2008-03-27 10:55:30 2 z          2008-03-27 10:55:55 2 t       

SQL 将一条记录中多个字段的值拼接为一个字段 && 将多行数据合并成一行,并且拼接CONVERT() 、for xml path的使用

接着上篇文章的订单表(商品编号,价格设置时间id(类似于创建时间,创建时间约早,则act_id越小) ,价格的时间段,商品价格) 一.将一条记录中多个字段的值拼接为一个字段 现要求将两个时间段合并为一个字段,应该如何做呢? 先来看下理想的结果: 查询出的时间段合并到一起了: 代码如下,将查询的字段用+'你想要的符号' + 拼接即可 select item,act_id,loc_id,convert(varchar(100),start_date,20)+ '-' +convert(varchar

SQLLoader7(只导入数据文件的其中几行记录)

数据文件: D:\oracletest\test1.txt 1 SMITH CLERK 7902 1980-12-17 800 0 20 2 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 3 WARD SALESMAN 7698 1981-02-22 1250 500 30 4 JONES MANAGER 7839 1981-04-02 2975 0 20 5 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 6 B

mysql中将多行数据合并成一行数据

一个字段可能对应多条数据,用mysql实现将多行数据合并成一行数据 例如:一个活动id(activeId)对应多个模块名(modelName),按照一般的sql语句: 1 SELECT am.activeId,m.modelName 2 FROM activemodel am 3 JOIN model m 4 ON am.modelId = m.modelId 5 ORDER BY am.activeId 查询出的列表为图1所示: 图1 修改过后的sql语句,查询后如图2所示: 1 SELECT

Oracle系列:记录Record

Oracle系列:记录Record 分类: [Oracle] (15) 版权声明:本文为博主原创文章,未经博主允许不得转载. Oracle系列:记录(Record) 一,什么是记录(Record)? 由单行多列的标量构成的复合结构.可以看做是一种用户自定义数据类型.组成类似于多维数组.将一个或多个标量封装成一个对象进行操作.是一种临时复合对象类型.  记录可以直接赋值.RECORD1 :=RECORD2: 记录不可以整体比较. 记录不可以整体判断为空. 二,%ROWTYPE和记录(Record)