sql - 获取父编号不总是匹配的父/子
问题描述
我在将所有相关项目汇总到一个结果集中时遇到问题。
在本例中,我们有一个主控ParentPart
(901359),其中包含相关的组件。我们还可以拥有作为父部件的组件(340804、340801、340850)
以下数据是我正在处理的
ParentPart Component
---------------------
901359 340804
340804 340801
340801 340850
340850 333000
我想要得到的是这个结果,或者让所有相关的组件汇总起来
ParentPart Component
----------------------
901359 340804
901359 340801
901359 340850
901359 333000
下面是测试代码。
CREATE TABLE #Hierarchy
(
ParentPart VARCHAR(15),
Component VARCHAR(15)
)
INSERT INTO #Hierarchy (ParentPart, Component)
VALUES
('901359','340804'),
('340804','340801'),
('340801','340850'),
('340850','333000')
SELECT *
FROM #Hierarchy
DROP TABLE #Hierarchy
我尝试了递归 CTE,但它并没有给我我正在寻找的结果,因为父部分并不完全相同。
任何指针?
解决方案
这是一个典型的递归查询。在这种情况下,您可以从上到下遍历树:
with cte as (
select parentpart, component, 1 lvl from #Hierarchy
union all
select c.parentpart, h.component, lvl + 1
from cte c
inner join #Hierarchy h on h.parentpart = c.component
)
select parentpart, component
from cte c
where c.lvl = (select max(c1.lvl) from cte c1 where c1.component = c.component)
递归公用表表达式生成树路径,同时跟踪每个节点的级别;然后外部查询过滤每个节点的顶级父节点。
父部分 | 零件 :--------- | :-------- 901359 | 340804 901359 | 340801 901359 | 340850 901359 | 333000
推荐阅读
- r - R Shiny Application 移动图位置
- swiftui - 崩溃导致索引超出范围——尽管我确定索引没有超出范围
- amazon-web-services - 如何动态更改 DefinitionBody 内的 S3 路径
- python - DRF:在一个请求中过滤多个字段
- r - 结合嵌套 `tar_map` 调用的结果
- c# - 实体框架 - 按一列分组并选择多列
- python - discord.py重写中用逗号分隔的多个参数?
- javascript - 在正文中发送带有 JSON.stringify(obj) 的帖子不会在 API 接收端产生字符串
- asp.net-core - 在浏览器会话之间保存和访问 jwt 令牌 cookie
- go - 使用 unsafe from string 转换的字节切片更改其地址