如何查找 'MAIN' 主记录 SQL
How to find 'MAIN' master record SQL
我是运行一个查询:
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)
其中 return 结果如下:
我只是碰巧知道这些 ID 并将它们用于此示例。
我怎样才能 return 将关联的公司全面分组在一起,直到我到达 'MAIN' 公司。
还有其他几家我不知道 ID 的公司我希望能够将这些结果基本上组合在一起,这样我就可以继续获得主要公司 return 及其父子关联.
我刚刚设法让我的 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
您可以使用递归 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
我是运行一个查询:
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)
其中 return 结果如下:
我只是碰巧知道这些 ID 并将它们用于此示例。
我怎样才能 return 将关联的公司全面分组在一起,直到我到达 'MAIN' 公司。
还有其他几家我不知道 ID 的公司我希望能够将这些结果基本上组合在一起,这样我就可以继续获得主要公司 return 及其父子关联.
我刚刚设法让我的 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
您可以使用递归 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