SQL在Id';s并返回行(如果所有项都是相同的顶级父ID)

SQL在Id';s并返回行(如果所有项都是相同的顶级父ID),sql,sql-server,join,Sql,Sql Server,Join,我必须编写脚本,我想合并到一个脚本中: SELECT [CategoryId] FROM [dbo].[Unit] where Id in (716,724) 及 我想在第一部分中为所有结果编写低代码,如果所有结果都有相同的根,则返回根Catogry 像DECLARE@Id INT=从[dbo].[Unit]中选择[CategoryId],其中Id位于(716724) 希望有意义您可以在第一次选择的联合中使用dbo.Unit和dbo.Category之间的join: ;WITH cteGet

我必须编写脚本,我想合并到一个脚本中:

SELECT [CategoryId] FROM [dbo].[Unit] where Id in (716,724) 

我想在第一部分中为所有结果编写低代码,如果所有结果都有相同的根,则返回根Catogry 像DECLARE@Id INT=从[dbo].[Unit]中选择[CategoryId],其中Id位于(716724)


希望有意义

您可以在第一次选择的联合中使用
dbo.Unit
dbo.Category
之间的
join

;WITH cteGetRootID
As
(
    SELECT
        c.Id, c.[Name], c.ParentId, 1 AS CodePosition
    FROM
        Category c 
            INNER JOIN  [dbo].[Unit] u on u.CategoryID = c.Id
    WHERE u.Id in (716,724) 
    UNION All
    SELECT
        ic.Id, ic.[Name], ic.ParentId, CodePosition + 1
    FROM Category ic 
             INNER JOIN cteGetRootID cte ON ic.Id = cte.ParentId
)
SELECT  top 1 Id, [Name]  FROM cteGetRootID
ORDER BY CodePosition desc
;WITH cteGetRootID
As
(
    SELECT
        c.Id, c.[Name], c.ParentId, 1 AS CodePosition
    FROM
        Category c 
            INNER JOIN  [dbo].[Unit] u on u.CategoryID = c.Id
    WHERE u.Id in (716,724) 
    UNION All
    SELECT
        ic.Id, ic.[Name], ic.ParentId, CodePosition + 1
    FROM Category ic 
             INNER JOIN cteGetRootID cte ON ic.Id = cte.ParentId
)
SELECT  top 1 Id, [Name]  FROM cteGetRootID
ORDER BY CodePosition desc