我正在運行一個查詢:
SELECT
parent_company_component_id
,company_component_id
,name
,valid_cpy_compnt_type_cs_name
FROM dbo.cs_company_component
WHERE company_component_id IN (10217,7726,3109)
回傳以下結果:

我只是碰巧知道這些 ID 并在此示例中使用它們。
在我到達“主要”公司之前,我如何才能全面回傳這樣的結果,將鏈接公司分組在一起。
將有其他幾家公司,我不知道我希望能夠將這些結果基本上組合在一起的 ID,這樣我就可以繼續讓 MAIN 公司回傳它的父子協會。
uj5u.com熱心網友回復:
您可以使用遞回 CTE 遍歷關系。
它允許您包含額外的內容,例如基本 ID 和級別計數器。
WITH RCTE_COMP_COMP AS
(
-- The seed query to start the recursion
SELECT
t.company_component_id AS base_id
, ?t.name AS base_name
?, 1 AS lvl
?, t.parent_company_component_id
?, t.company_component_id
?, t.name
?, t.valid_cpy_compnt_type_cs_name
?FROM dbo.cs_company_component t
?WHERE t.parent_company_component_id IS NULL
?UNION ALL
?
?-- The query where the CTE uses itself
?SELECT
cte.base_id
, cte.base_name
, cte.lvl 1
?, t.parent_company_component_id
?, t.company_component_id
?, t.name
?, t.valid_cpy_compnt_type_cs_name
?FROM RCTE_COMP_COMP AS cte
?JOIN dbo.cs_company_component AS t
?ON t.parent_company_component_id = cte.company_component_id
)
SELECT *
FROM RCTE_COMP_COMP cte
ORDER BY cte.base_id, cte.lvl
uj5u.com熱心網友回復:
我剛剛設法讓我的 CTE 作業
WITH CTE AS
(
SELECT
parent_company_component_id
,company_component_id
,name
,valid_cpy_compnt_type_cs_name
,1 AS level
FROM dbo.cs_company_component
WHERE parent_company_component_id IS NULL
--AND valid_cpy_compnt_type_cs_name = 'MAIN'
UNION ALL
SELECT X.parent_company_component_ID, X.company_component_id, x.name, x.valid_cpy_compnt_type_cs_name, CTE.level 1 as Level
FROM CTE
JOIN cs_company_component AS X ON X.parent_company_component_id = CTE.company_component_id --AND X.valid_cpy_compnt_type_cs_name = 'MAIN'
)
SELECT * FROM CTE
ORDER BY Level ASC
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359838.html
標籤:sql 亲子 sql-server-2016
上一篇:從表中查找僅對一個ID唯一的值
