Oracle:合并两行

时间:2012-10-11 08:20:48

标签: oracle oracle8i

我的表中有一对相关的行。

如何合并这些行:

date                         col1 col2
2012-09-11 13:28:21.0000000  A    50
2012-09-11 13:28:21.0000000  A    -50

到一行

date                         col1 col2 col3
2012-09-11 13:28:21.0000000  A    50   -50

如果两个日期之间可能存在细微的差异(大约一秒钟,它只出现在100对中的1对中)? e.g:

2012-09-11 13:28:21.0000000
2012-09-11 13:28:22.0000000

或者更坏的情况是,整秒钟改变一秒钟:

2012-09-11 13:28:59.0000000
2012-09-11 13:29:00.0000000

更新(字符串列):

如何使用字符串值将相同的行与其他col3合并?

date                         col1 col2 col4
2012-09-11 13:28:21.0000000  A    50   abc
2012-09-11 13:28:21.0000000  A    -50  def

为:

date                         col1 col2 col3 col5 col6
2012-09-11 13:28:21.0000000  A    50   -50  abc  def

或者:

date                         col1 col2 col3 col5
2012-09-11 13:28:21.0000000  A    50   -50  abc,def

解决方案(字符串)(hkutluays答案的延伸):

max(case when col2 > 0 then col4 end) col5
max(case when col2 < 0 then col4 end) col6

1 个答案:

答案 0 :(得分:1)

未经测试但可以解决问题。

select 
round(sysdate,'MI'),col1, sum( case when col2> 0 then col2 else 0 end ) col2,
sum( case when col2 < 0 then col2 else 0 end ) col3
from table
group by round(sysdate,'MI'),col1