Sql 确保如果类别不存在关键字,则应返回其父级的数据
样本输入/输出:Sql 确保如果类别不存在关键字,则应返回其父级的数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,样本输入/输出: Input: 202 Output: ParentCategoryID = 201 Name = Operating System Keywords = Teaching 这就是我尝试过的: SELECT TOP 1000 T1.[CatergoryId] ,T1.[ParentCategoryId] ,T1.[Name] ,(case when T1.[Keywords] IS null then (select C.[
Input: 202
Output: ParentCategoryID = 201
Name = Operating System
Keywords = Teaching
这就是我尝试过的:
SELECT TOP 1000 T1.[CatergoryId]
,T1.[ParentCategoryId]
,T1.[Name]
,(case when T1.[Keywords] IS null
then (select C.[Keywords] FROM [Ingenio].[dbo].[Cat] C
where c.[CatergoryId]=T1.[ParentCategoryId])
else T1.[Keywords]
end) as Keywords
FROM [Ingenio].[dbo].[Cat] T1
join [Ingenio].[dbo].[Cat] T2
on T1.CatergoryId =T2.CatergoryId
where T1.CatergoryId = 202
查询适用于第一级,但不适用于第二级和第N级
有人能帮帮我吗?你必须使用一个:
DECLARE @param INT = 201
;WITH CTE AS (
SELECT CategoryId, ParentCategoryId, Name, Keywords
FROM Cat
WHERE CategoryId = @param
UNION ALL
SELECT c1.CategoryId, c1.ParentCategoryId, c1.Name, c1.Keywords
FROM Cat AS c1
INNER JOIN CTE AS c2 ON c1.CategoryId = c2.ParentCategoryId
WHERE c1.Keywords IS NOT NULL -- terminate if keyword from previous level is not null
)
SELECT *
FROM CTE
输出:
CategoryId ParentCategoryId Name Keywords
------------------------------------------------------
201 200 Computer NULL
200 -1 tutoring teaching
为什么关键字在教学?给定类别级别作为参数(例如N)返回层次结构中第N级类别的名称(parentId为-1的类别位于第1级)。样本输入/输出:i。投入:2;输出:101102201 ii。投入:3;输出:103109202这是否可以通过递归CTE实现?@Ramesh是的,它当然可以。你可以试着把这当作一个不同的问题来发帖。我在这里提出的是