试图弄清楚如何在Oracle PL / SQL中执行此操作。
我想在列中创建值,该列会根据某个值何时出现在另一列中来对记录进行分组。例如,根据此图像第一列中的值,我想在“组”列中创建值。 “red”的值始终是一组记录中的第一个值。除“红色”以外的任何后续颜色值属于同一组。下一个“红色”值表示需要创建一个新的“组”值。
有关如何在“群组”列中创建值的任何想法?提前谢谢。
答案 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;