sql-server - 确定叶子细节链的分层查询
问题描述
我提出了一个让我(最终)挖掘的问题,因为我未能找到解决方案:考虑 Table_1 作为我的示例数据源,导致 Table_2 中列出的结果的正确 T-SQL 代码是什么?
表_1:来源
表_2:结果
[HCode_EmpChain] 内容应反映与标识为 [ManagerID] 的每个 [EmployeeID] 关联的唯一 [HCode] 的“/”分隔连续序列。以员工 11 为例,他/她是 12、67 和 69 的经理,因此他们关联的 HCode 值将是寻找的“300251 / 421024”结果。
鉴于大量“现实生活”中的记录数量和未知的层次结构深度级别,我的常识使我将动态递归 CTE 作为正确的方法,但没有成功。
谢谢你。
编辑-> 我能想到的最好的: t-sql 尝试
解决方案
对于它的价值,链条通常是相反的。也就是说,您通常会将返回到最终祖先的路径存储在从属记录上。使用您的示例数据,EmployeeID 68 将 /722920/300251/559217/ 存储在表示血统的列中。然后,如果您想在表中查询“给我 EmployeeID 11 报告链中的员工”,您可以执行基于字符串的查询,例如(我已对其进行硬编码以简化示例):
select *
from dbo.Employee
where HCode_EmpChain like '/722920/%';
或者,如果您对该列使用 hierarchyid 数据类型
select child.*
from dbo.Employee as child
join dbo.Employee as parent
on child.HCode_EmpChainIsAncestor(parent.HCode_EmpChain) = 1
where parent.EmployeeID = 11;
推荐阅读
- spring-boot - Kafka 消费者在偏移提交后无法读取所有消息(错误=OFFSET_OUT_OF_RANGE
- javascript - 当我使用 getElementsbyClassName 时,无法使用 Vanilla JS 增加 div 的宽度
- python - 调用函数会导致所需的位置参数错误
- python - 买卖股票的最佳时机——Python 中的另一种方法
- java - 基于 ByteArrayInputStream 在 Java 中创建 DataFrame
- javascript - 如何使用 MutationObserver 检查将类添加到正文的元素?
- c++ - C++:为什么不能在派生类中访问受保护的构造函数?
- excel - 如何制作折线图,使折线图不重叠
- javascript - 使用角度 9 中的垫选择过滤垫表
- c# - 删除代码时有什么方法不会出现设计器错误?(C#、Visual Studio、WinForms)