Stackoverflowメンバーの皆様
次のような再帰CTEクエリがあります。
DECLARE @Level TABLE (ID int, ParentID int, Name varchar(max))
INSERT INTO @Level (ID, ParentID, Name)
VALUES (1,0, 'AAAA'),
(2,1, 'BBBB'),
(3,2, 'CCCC'),
(4,3, 'DDDD'),
(5,4, 'EEEE')
;WITH cte (ID, ParentID, Name, Path, Level) AS
(
SELECT
ID, ParentID, Name, CONVERT(varchar(MAX), Name), 1
FROM
@Level
WHERE
ParentID = 0
UNION ALL
SELECT
n.ID, n.ParentID, n.Name,
CONVERT(varchar(MAX), cte.Path + '/' + n.Name), cte.Level + 1
FROM
@Level n
JOIN
cte on n.ParentID = cte.ID
)
SELECT * FROM cte
上記のクエリの結果:
ID ParentID Name Path Level
----------- ----------- ------- ---------------------------- -----------
1 0 AAAA AAAA 1
2 1 BBBB AAAA/BBBB 2
3 2 CCCC AAAA/BBBB/CCCC 3
4 3 DDDD AAAA/BBBB/CCCC/DDDD 4
5 4 EEEE AAAA/BBBB/CCCC/DDDD/EEEE 5
CTEクエリからの必要な出力:
ID ParentID Name Paths Path Level
----------- ----------- ----------------------------------- ---------------------------- -----------
1 0 AAAA AAAA AAAA 1
2 1 BBBB AAAA/BBBB AAAA/BBBB 2
3 2 CCCC AAAA/.../CCCC AAAA/BBBB/CCCC 3
4 3 DDDD AAAA/.../.../DDDD AAAA/BBBB/CCCC/DDDD 4
5 4 EEEE AAAA/.../.../.../EEEE AAAA/BBBB/CCCC/DDDD/EEEE 5
上記の例からわかるように、パスは非常に長くなる可能性があり、パスをドットに置き換える必要があります。開始文字と終了文字が表示されたままで、中央のコンテンツのみが置き換えられることを除いて。VALUESの内容は、例として使用されているものであれば何でもかまいません。
ありがとう