首页 > 解决方案 > 每 2 行 SQL 分组

问题描述

我们有什么:

id|value1|value2|
1 |15    |null  |
2 |null  |12    |
3 |98    |null  |
4 |null  |41    |

我们想要的 - 每两行对数据进行分组以获得以下结果:

idGrouped|value1|value2|
1        |15    |12    |
2        |98    |41    |

我想我可以在 id 列上使用模数。

这是一个 Oracle 数据库(但我更喜欢在“纯 sql”中进行)

编辑

它可能不清楚,但重要的部分是“idGrouped”列。我简化了示例,但我需要每 2 行(或“n”行)对数据进行分组。

标签: sqloracle

解决方案


您可以使用条件聚合:

select floor( (id - 1) / 2) as id, max(value1), max(value2)
from t
group by floor( (id - 1) / 2);

这假设它id是递增的,没有间隙。如果这不是真的,请使用row_number()

select floor( (seqnum - 1) / 2) as id, max(value1), max(value2)
from (select t.*, row_number() over (order by id) as seqnum
      from t
     ) t
group by floor( (seqnum - 1) / 2);

推荐阅读