1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| WITH
TT AS
(
SELECT ROW_NUMBER() OVER (ORDER BY AR_Ref, NO_RefDet) AS N,
AR_Ref, NO_RefDet, CAST(AR_Ref + ', ' + NO_RefDet AS VARCHAR(max)) AS LISTE,
0 AS LVL
FROM NOMENCLAT
UNION ALL
SELECT TT.N, TT.AR_Ref, TN.NO_RefDet, LISTE +', ' + TN.NO_RefDet,
LVL + 1
FROM TT
INNER JOIN NOMENCLAT AS TN
ON TT.NO_RefDet = TN.AR_Ref
),
TF AS
(
SELECT AR_Ref, NO_RefDet, LISTE AS LISTE, N, LVL,
RANK() OVER(PARTITION BY N ORDER BY LVL DESC) AS M
FROM TT)
SELECT AR_Ref, NO_RefDet, LISTE
FROM TF
WHERE M = 1; |