根据另一列中的值创建分组ID

时间:2017-07-09 00:39:26

标签: sql oracle

试图弄清楚如何在Oracle PL / SQL中执行此操作。

我想在列中创建值,该列会根据某个值何时出现在另一列中来对记录进行分组。例如,根据此图像第一列中的值,我想在“组”列中创建值。 “red”的值始终是一组记录中的第一个值。除“红色”以外的任何后续颜色值属于同一组。下一个“红色”值表示需要创建一个新的“组”值。

[1]

有关如何在“群组”列中创建值的任何想法?提前谢谢。

2 个答案:

答案 0 :(得分:1)

SQL表代表无序集。所以,我假设您有一个指定排序的列。我只是称之为id

您的grp列只是红色的总和,包括任何行。这很简单:

select t.*,
       sum(case when colors = 'red' then 1 else 0 end) over (order by id) as grp
from t;

答案 1 :(得分:0)

您可以使用ROWS BETWEEN子句获取“红色”颜色的总和,直到当前ROW

          SELECT a.color,
             SUM(DECODE(color,'red',1,0) ) OVER ( ORDER BY ROWNUM 
                 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) rn
           FROM colors a;