【问题标题】:Reverse order of a CTE result?CTE 结果的倒序?
【发布时间】:2023-01-26 17:42:49
【问题描述】:

这是我的代码,从一个节点开始遍历所有节点:

SELECT * INTO MyTable
FROM
(
    SELECT 1 Id, 1 ParentId, 'Parent A' Name
    UNION ALL
    SELECT 5,1,'Child A1'
    UNION ALL
    SELECT 47894,5,'Child A2'
    UNION ALL
    SELECT 2,2, 'Parent B'
    UNION ALL
    SELECT 3,2, 'Child B1'
)TAB

;With CTE as
(
  select * from MyTable where Id = 47894
  union all
  select a.* from MyTable a inner join cte b 
    on a.Id=b.ParentId and a.Id<>b.Id
)

select STRING_AGG(Name, ' >> ') from CTE

输入 47894,它给出:

Child A2 >> Child A1 >> Parent A

如果我需要反转怎么办?

Parent A >> Child A1 >> Child A2

【问题讨论】:

    标签: sql-server common-table-expression


    【解决方案1】:

    你可以使用这个:

    SELECT *
    INTO   MyTable
    FROM   (
              SELECT
                 1 Id,
                 1 ParentId,
                 'Parent A' Name
              UNION ALL
              SELECT
                 5,
                 1,
                 'Child A1'
              UNION ALL
              SELECT
                 47894,
                 5,
                 'Child A2'
              UNION ALL
              SELECT
                 2,
                 2,
                 'Parent B'
              UNION ALL
              SELECT
                 3,
                 2,
                 'Child B1'
           ) TAB;
    WITH CTE
    AS (SELECT
              Id,
              ParentId,
              Name,
              CAST(1 AS INT) AS OrderByValue
        FROM  MyTable
        WHERE Id = 47894
        UNION ALL
        SELECT
             a.Id,
             a.ParentId,
             a.Name,
             OrderByValue + 1
        FROM MyTable a
             INNER JOIN CTE b ON a.Id = b.ParentId
                                 AND a.Id <> b.Id)
    SELECT STRING_AGG(Name, ' >> ')WITHIN GROUP(ORDER BY CTE.OrderByValue DESC)
    FROM   CTE;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2016-08-22
      • 1970-01-01
      相关资源
      最近更新 更多