【发布时间】:2017-12-20 13:17:20
【问题描述】:
有没有办法在 SQL Server 中加入/合并两个分层表?
我有两个示例表:BOM 和 ComponentDetail
declare @BOM table
(
BomNode hierarchyid primary key,
ComponentID int
)
insert into @BOM
values
('/', NULL),
('/1/', 1),
('/1/1/', 2),
('/1/2/', 3),
('/1/3/', 4)
declare @ComponentDetail table
(
CompNode hierarchyid primary key,
ComponentID int,
SteelProductID int
)
insert into @ComponentDetail
values
('/', NULL,NULL),
('/1/', 2, NULL),
('/1/1/', 2,1),
('/1/2/', 2,2)
我想做的是暂时合并这两个表,以便在我的应用程序中查看结果:
更新:@Sean Lange 我在声明 Result 表时犯了一个错误 - 它应该如下所示:
insert into @Result
values
('/', NULL, NULL),
('/1/', 1, NULL),
('/1/1/', 2, NULL),
('/1/1/1/', NULL, 1),
('/1/1/2/', NULL, 2),
('/1/2/', 3, NULL),
('/1/3/', 4, NULL)
select
Node.ToString() as NodeChar, ComponentID, SteelProductID
from @Result
这是所需输出的图表: Output diagram
有人吗?
【问题讨论】:
-
如果您不将单个记录 ID 值存储为列中的“正斜杠分隔”(?) 值,会容易得多。您可以使用递归 CTE 轻松地将 BOM 的所有级别拼凑在一起。有了这个,看起来您必须首先解析数据并对其进行规范化,然后使用另一个查询来返回您需要的数据。
-
@JacobH 不是分隔数据,OP 使用的是 hierarchyid 数据类型。 docs.microsoft.com/en-us/sql/t-sql/data-types/…
-
啊,这很好。从未使用hierarchyid 类型。每天学习新东西。
标签: sql sql-server join merge hierarchyid