简体   繁体   English

如何将结果集形成下表

[英]How to the result set form the below table

Table 1 contains certain set of data's. 表1包含某些数据集。 I need to get the following result set form the Table 1 我需要从表1中获得以下结果集

Table1 表格1

Id  Desc          ParentId
1   Cloths            0
2   Mens              1
3   Womens            1
4   T-Shirt_M         2
5   Casual Shirts_M   2
6   T-Shirt_F         3
7   Education         8

If I pass a parameter as "Casual Shirts_M" I should get the below result set. 如果我将参数传递为“ Casual Shirts_M”,则应获得以下结果集。

Result Set 结果集

Id  Desc          ParentId
1   Cloths            0
2   Mens              1
5   Casual Shirts_M   2

As mentioned in comments, there are plenty of Recursive Common Table Expressions examples for this, here's another one 如评论中所述,有很多递归公用表表达式示例,这里是另一个

DECLARE @Desc NVARCHAR(50) = 'Casual Shirts_M'
;WITH cteX
AS
(   SELECT
        B.Id, B.[DESC], B.ParentId
    FROM
        Table1 b
    WHERE
        B.[Desc] = @Desc
    UNION ALL
    SELECT
        E.Id, E.[DESC], E.ParentId
    FROM
        Table1  E
    INNER JOIN
        cteX r ON e.Id = r.ParentId
)
SELECT * FROM cteX ORDER BY ID ASC

SQL-Fiddle provided by @WhatsThePoint 由@WhatsThePoint提供的SQL小提琴

The question comes under the concept of Building hierarchy using Recursive CTE: 问题来自使用递归CTE构建层次结构的概念:

 CREATE TABLE cloths 
  ( 
     id       INT, 
     descr    VARCHAR(100), 
     parentid INT 
  ); 


insert into cloths values (1,'Cloths',0);
insert into cloths values (2,'Mens',1);
insert into cloths values (3,'Womens',1);
insert into cloths values (4,'T-Shirt_M',2);
insert into cloths values (5,'Casual Shirts_M',2);
insert into cloths values (6,'T-Shirt_F',3);
insert into cloths values (7,'Education',8);


DECLARE @variety VARCHAR(100) = 'Casual Shirts_M'; 

WITH 
cte1 (id, descr, parentid) 
     AS (SELECT * 
         FROM   cloths 
         WHERE  descr = @variety 
         UNION ALL 
         SELECT c.id, 
                c.descr, 
                c.parentid 
         FROM   cloths c 
                INNER JOIN cte1 r 
                        ON c.id = r.parentid) 
SELECT * 
FROM   cte1 
ORDER  BY parentid ASC; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM