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