带条件的 SQL 分组

klm_

我想对表中的行求和。该算法在理论上相当简单,但在我需要构建查询时很难(至少对我而言)。

通常,我想对“子组”的“值”求和。子组定义为一系列元素,从 type=0 的第一行开始,以 type=1 的最后一行结束。子组应仅包含一个(第一)行,类型为 0。

下面的示例展示了正确(左)和不正确(右)的行为。 样本

我尝试了几种方法,包括分组和分区。不幸的是没有任何成功。有人遇到过类似的问题吗?

我使用了 MS SQL Server(所以 T-SQL 'magic' 是允许的)

编辑:

我想要的结果:

"ab",6

"cdef",20

“写”,10

"kl",8

戈登·利诺夫

您可以通过对零进行累计和来识别组。然后使用聚合或窗口函数。

请注意,SQL 表表示无序集合,因此您需要一列来指定排序。下面的代码假定此列是id.

select min(id), max(id), sum(value)
from (select t.*,
             sum(case when type = 0 then 1 else 0 end) over (order by id) as grp
      from t
     ) t
group by grp
order by min(id);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章