SQL连接/合并两个hierarchyid表

问题描述 投票:0回答:1

有没有办法在SQL Server中加入/合并两个分层表?

我有两个样本表:BOMComponentDetail

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

任何人 ?

sql sql-server join merge hierarchyid
1个回答
0
投票

您可以像其他任何表一样将这两个表连接在一起。在这种情况下,完全外部联接可能是您想要的。

这将从您的示例数据中返回所需的输出:

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 
© www.soinside.com 2019 - 2024. All rights reserved.