根据聚合值条件标记行
Tag a row based on aggregate value condition
这是我的数据集,其中顺序是每个产品的修复顺序。
我想要的是这里的另一个专栏,比方说TagID
。 TagID
是一个 int
值,它将基于聚合计数列,如果它大于或等于 5,则按产品分组。
因此数据集将如下所示:
如何在 SQL 服务器中完成此操作?
提前致谢。
这需要递归 CTE。您已经有一个编号列,所以这很简单:
with cte as (
select product, order, count, 1 as grp, count as s
from t
where order = 1
union all
select cte.product. t.order, t.count,
(case when cte.s + t.count >= 5 then grp + 1 else grp end),
(case when cte.s + t.count >= 5 then t.count else cte.s + t.count end)
from cte join
t
on t.product = cte.product and t.order = cte.order + 1
)
select *
from cte;
这是我的数据集,其中顺序是每个产品的修复顺序。
我想要的是这里的另一个专栏,比方说TagID
。 TagID
是一个 int
值,它将基于聚合计数列,如果它大于或等于 5,则按产品分组。
因此数据集将如下所示:
如何在 SQL 服务器中完成此操作?
提前致谢。
这需要递归 CTE。您已经有一个编号列,所以这很简单:
with cte as (
select product, order, count, 1 as grp, count as s
from t
where order = 1
union all
select cte.product. t.order, t.count,
(case when cte.s + t.count >= 5 then grp + 1 else grp end),
(case when cte.s + t.count >= 5 then t.count else cte.s + t.count end)
from cte join
t
on t.product = cte.product and t.order = cte.order + 1
)
select *
from cte;