Для выполнения такого рода родительских / дочерних действий на любом уровне без явного кодирования всех уровней вам необходимо использовать рекурсивный CTE.
Подробнее здесь
https://www.red -gate.com / simple-talk / sql / t-sql-программирования / sql-server-cte-basics /
Вот некоторые тестовые данные и решение, которое я нашелс.Обратите внимание, что три записи на самом деле соответствуют 028.001.19.2.3
Если это не помогает, пожалуйста, объясните подробнее с примерами данных.
DECLARE @Sample TABLE (
TC_Self CHAR(14) NOT NULL,
TC_In CHAR(14) NOT NULL,
EquipmentNo INT NOT NULL
);
INSERT INTO @Sample (TC_Self, TC_In, EquipmentNo)
VALUES
('028.001.19.2.3','026.003.19.2.2',96),
('028.001.19.2.3','026.001.19.2.2',96),
('028.001.19.2.3','026.002.19.2.2',96),
('028.001.19.2.2','026.002.19.2.1',96),
('028.001.19.2.2','026.002.19.2.1',96),
('028.001.19.2.1','026.002.19.1.1',96),
('026.003.19.2.2','024.501.19.2.5',117),
('024.501.19.2.5','024.501.19.2.6',999),
('024.501.19.2.6','024.501.19.2.7',998);
WITH CTE (RecordType, TC_Self, TC_In, EquipmentNo)
AS
(
-- This is the 'root'
SELECT 'Root' RecordType, TC_Self, TC_In, EquipmentNo FROM @Sample
WHERE TC_Self = '028.001.19.2.3'
UNION ALL
SELECT 'Leaf' RecordType, S.TC_Self, S.TC_In, S.EquipmentNo FROM @Sample S
INNER JOIN CTE
ON S.TC_Self = CTE.TC_In
)
SELECT * FROM CTE;
Также обратите внимание, чтоБольшую часть времени для генерации этого ответа было потрачено на создание образца данных для использования.
В будущем, когда задают вопросы, люди с гораздо большей вероятностью помогут, если вы опубликуете этот пример создания данных самостоятельно