SQL连接/合并两个hierarchyid表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL连接/合并两个hierarchyid表相关的知识,希望对你有一定的参考价值。
有没有办法在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
任何人 ?
答案
您可以像其他任何表一样将这两个表连接在一起。在这种情况下,完全外部联接可能是您想要的。
这将从您的示例数据中返回所需的输出:
select Node = coalesce(b.BomNode.ToString(), c.CompNode.ToString())
, ComponentID = coalesce(b.ComponentID, c.ComponentID)
, c.SteelProductID
from @BOM b
full outer join @ComponentDetail c on c.CompNode = b.BomNode
- 编辑 -
根据我的新理解,我认为它是这样的(但它在层次结构的东西上并不完全正确,但我不清楚你想要的是什么):
select distinct Node = coalesce(b.BomNode.ToString(), c.CompNode.ToString()) + coalesce(convert(varchar(4), c.ComponentID) + '/', '')
, ComponentID = coalesce(b.ComponentID, c.ComponentID)
, c.SteelProductID
from @BOM b
full outer join @ComponentDetail c on b.ComponentID = c.ComponentID
以上是关于SQL连接/合并两个hierarchyid表的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 使用 Hierarchyid 操作层次结构数据
使用CLR函数在Visual Studio 2019中将Hierarchyid转换为字符串