将相邻的重复行合并为一个

时间:2014-05-21 08:59:00

标签: sql oracle

我想将相邻的重复行合并为一个, 例如,我有一个包含两列的表演示

data | order
-------------
 A   | 1 
 A   | 2
 B   | 3
 B   | 4
 A   | 5

我希望结果是:

A
B
A

如何通过在oracle中选择一个SQL查询来实现这一目标?

3 个答案:

答案 0 :(得分:2)

请尝试这样的事情

select *
from table t1
where not exists(select * from table t2 where t2.order = t1.order - 1 and t1.data = t2.data)

答案 1 :(得分:2)

上面的Dmitry建议的答案是在SQL中工作,要使它在oracle中工作,你需要做一些修改。

order是一个保留关键字,您需要按如下方式转义它。

select 
    *
from 
    Table1 t1
where not exists(
    select * from Table1 t2 
  where 
      t2."order" = t1."order" - 1 
    and 
      t1."data" = t2."data"
) order by "order"

工作小提琴http://sqlfiddle.com/#!4/cc816/3

答案 2 :(得分:-2)

您可以按列分组

查看http://docs.oracle.com/javadb/10.6.1.0/ref/rrefsqlj32654.html

来自官方oracle网站的示例:

SELECT AVG (flying_time), orig_airport
FROM Flights
GROUP BY orig_airport