Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 确保如果类别不存在关键字,则应返回其父级的数据_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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是的,它当然可以。你可以试着把这当作一个不同的问题来发帖。我在这里提出的是