sql - SQL Server:列的链式分组
问题描述
我需要使用以下规则对两个不同的列进行分组:
如果一个订单被拆分成多个容器,所有这些容器必须在同一个组中
如果任何分组的容器有多个订单,则每个订单都需要在同一组中处理(如结果中的组 C)。当发生这种情况并且订单属于另一个组时,需要合并这些组。这可能会导致大型连锁店...
每个其他容器都可以单独处理,不属于一个组
我有以下数据:
我的目标是创建一个应返回以下结果的视图:
解决方案
这是一个图行走问题。您需要遍历链接容器的图表以获取所有可能链接到订单的容器。
然后我的解决方案是聚合以获得最小值并用于dense_rank()
分配分组。
with cte as (
select orderid, containerid, containerid as linked_containerid,
cast(',' + convert(varchar(max), containerid), ',') as containers
from t
union all
select cte.orderid, cte.containerid, t.containerid,
cte.containers + convert(varchar(max), t.containerid) + ','
from cte join
t
on cte.containerid = t.containerid and
cte.containerid not like '%,' + convert(varchar(max), t.containerid) + ',%'
)
select cte.orderid, cte.containerid,
dense_rank(min(cte.linked_container)) over () as grouping
from cte
group by cte.orderid, cte.containerid;
推荐阅读
- maven - 执行目标 org.apache.maven.plugins:maven-site-plugin:3.8.2:site 的默认站点失败:Java 返回:137
- python - 也许,这是梯度下降的缺点吗?
- python - 如何在 python 中对递归函数进行单元测试?
- r - R:使用 ggplot2 运行总计的聚集列
- c# - 正确使用控制台输入
- python-3.x - 使用 Kivy 和 Socket.io 运行 Trio 时出现问题
- javascript - 单击选定的目标 HTML CSS 后,移动设备上的导航栏不会隐藏
- json - 对来自不同级别的值根据邻居成员选择一个
- java - 关于约束布局的问题
- mongodb - 如何使用用户管理方法和 pymongo 在 MongoDB 中通过 UserId 查询用户