簡體   English   中英

SQL升級子級結構

[英]SQL Promote child in Hierarchical structure

我正在嘗試進行一個查詢,使我可以將兒童級別提升為層次結構表,但沒有結果。 在示例表下方:

在此處輸入圖片說明

我想應用的解決方案是,如果孩子是以“ NO_”開頭的代碼的孩子,則必須將其鏈接到不是以“ NO_”開頭的高級父親。 例:

在此處輸入圖片說明

我已經嘗試了一些解決方案,例如使用cte或從join更新,但沒有得到結果,我可以得到支持嗎?

謝謝

更新1

刪除/替換列是關於img的注釋,我一直在嘗試應用類似的解決方案:

WITH CHILD (PARENT,CHILD)
AS
(select B.PARENT,B.CHILD
from BOM B
where B.CHILD like 'NO_%')

Select * from CHILD


WITH PARENT (PARENT,CHILD)
AS
(SELECT B.PARENT,B.CHILD
    FROM BOM B
    where B.PARENT like 'NO_%')

select * from PARENT

然后應用更新

您需要使用CTE遞歸來標識“新父代”。 首先,選擇父母為“ NO_”的非“ NO_”個孩子。 從他們那里,您必須向上移動層次結構,直到找到非“ NO_”父對象。 為此,我使用了額外的列NEW_PARENT_FOUND。

這是查詢,可以輕松轉換為更新。

<!-- language: lang-sql -->
declare @vBOM table (PARENT varchar(20), CHILD varchar(20))
insert into @vBOM( PARENT, CHILD )
values
    ('C002584', 'NO_CRT874')
    , ('NO_CRT874', 'F8745')
    , ('NO_CRT874', 'IY845')
    , ('NO_CRT874', 'YRF522')
    , ('C002584', 'NO_UYTRR')
    , ('NO_UYTRR', 'NO_UYT953')
    , ('NO_UYT953', 'FEWF845')
    , ('C002584', '95659I')
    , ('C002584', '84666E')


; with cteNewParent as
    (select B.CHILD, B.PARENT NEW_PARENT, 0 NEW_PARENT_FOUND 
    from @vBOM B 
    where B.CHILD not like 'NO_%' and B.PARENT like 'NO_%'
    union all
    select NP.CHILD, B.PARENT NEW_PARENT, iif(NP.CHILD not like 'NO_%' and B.PARENT not like 'NO_%', 1, 0) NEW_PARENT_FOUND
    from cteNewParent NP inner join @vBOM B on B.CHILD = NP.NEW_PARENT
    where NP.NEW_PARENT_FOUND = 0 
    )
select NP.CHILD, NP.NEW_PARENT, NP.NEW_PARENT_FOUND, B.PARENT, B.CHILD
from cteNewParent NP inner join @vBOM B on B.CHILD = NP.CHILD
where NP.NEW_PARENT_FOUND = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM