首页 > 解决方案 > 确定叶子细节链的分层查询

问题描述

我提出了一个让我(最终)挖掘的问题,因为我未能找到解决方案:考虑 Table_1 作为我的示例数据源,导致 Table_2 中列出的结果的正确 T-SQL 代码是什么?

表_1:来源

表_2:结果

[HCode_EmpChain] 内容应反映与标识为 [ManagerID] 的每个 [EmployeeID] 关联的唯一 [HCode] 的“/”分隔连续序列。以员工 11 为例,他/她是 12、67 和 69 的经理,因此他们关联的 HCode 值将是寻找的“300251 / 421024”结果。

鉴于大量“现实生活”中的记录数量和未知的层次结构深度级别,我的常识使我将动态递归 CTE 作为正确的方法,但没有成功。

谢谢你。

编辑-> 我能想到的最好的: t-sql 尝试

标签: sql-servertsqlrecursioncommon-table-expressionhierarchical-data

解决方案


对于它的价值,链条通常是相反的。也就是说,您通常会将返回到最终祖先的路径存储在从属记录上。使用您的示例数据,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;

推荐阅读