将结果从一列转换为两行或更多

问题描述 投票:0回答:1

是否可以从一列中取出结果并将其转移到两列中。 以第一个和第二个结果作为开始和结束 和其他人都以同样的方式。 我使用了pivot,但没有得到任何实际结果。

当前结果

 rn old_date_row 

 1   01-JUN-18
 2   null 
 3   null 
 4   null
 5   22-JUN-18
 6   null
 7   null
 8   null
 9   25-JUN-19
 10  null
 11  null
 12  25-JUN-20

预期结果 新表

    start_date      end_date
   01-JUN-18       22-JUN-18    
   25-JUN-19       25-JUN-20
sql plsql oracle11g
1个回答
0
投票

您需要使用

row_number()
枚举不为空的行,然后使用
round(rid/2)
识别连续的行:

select old_date_row, rid, round(rid/2)
from (
  select old_date_row, row_number() over (order by rn) rid
  from mytable t
  where old_date_row is not null
)

结果:

OLD_DATE_ROW    RID ROUND(RID/2)
01-06-18        1   1
22-06-18        2   1
25-06-19        3   2
25-06-20        4   2

最终查询可以是:

select min(old_date_row) as start_date, max(old_date_row) as end_date
from (
  select old_date_row, row_number() over (order by rn) rid
  from mytable t
  where old_date_row is not null
)
group by round(rid/2);

结果:

START_DATE  END_DATE
01-06-18    22-06-18
25-06-19    25-06-20

演示在这里

© www.soinside.com 2019 - 2024. All rights reserved.