有没有办法在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