Sql-Server

為樹中的每個節點創建層次鏈(反向路徑)

  • May 25, 2016

給定一個典型的閉包表,我將如何編寫查詢以將 id 列表返回到根?有沒有辦法為所有

$$ unique $$身份證?我正在使用 Microsoft SQL Server。 鑑於:

parent  child   depth
1       1       0
2       2       0
3       3       0
1       2       1
2       3       1
1       3       2

我想要:

id    path
1     1
2     1,2
3     1,2,3

那有意義嗎?

對我來說看起來像一個GROUP_CONCAT,除非我錯過了什麼,例如

CREATE TABLE #heredity
(
   parent  INT NOT NULL,
   child   INT NOT NULL,
   depth   INT NOT NULL,

CONSTRAINT _pk_heredity PRIMARY KEY ( parent, child )
);
GO

INSERT INTO #heredity ( parent, child, depth )
VALUES
   ( 1, 1, 0 ),
   ( 2, 2, 0 ),
   ( 3, 3, 0 ),
   ( 1, 2, 1 ),
   ( 2, 3, 1 ),
   ( 1, 3, 2 );
GO


SELECT  
   child,
   STUFF(
   (
   SELECT ',' + CAST( parent AS VARCHAR(20) )
   FROM #heredity p
   WHERE c.parent = p.child
   ORDER BY parent DESC
   FOR XML PATH(''), TYPE
   ).value('.', 'VARCHAR(100)'),
   1, 1,'') AS [path]
FROM #heredity c
WHERE depth = 0;

我的結果:

測試結果

引用自:https://dba.stackexchange.com/questions/139514