WITH cte AS
(
SELECT
[id],
[id_produkt],
[id_nadrzedny_produkt],
[ilosc],
[id_typ_opakowania],
CAST(0 AS varbinary(MAX)) AS Level
FROM [EDI_FORM].[dbo].[NoweProdukty_opakowanie]
WHERE [id_nadrzedny_produkt] = 0
UNION ALL
SELECT
i.[id],
i.[id_produkt],
i.[id_nadrzedny_produkt],
i.[ilosc],
i.[id_typ_opakowania],
Level + CAST(i.[id] AS varbinary(MAX)) AS Level
FROM [EDI_FORM].[dbo].[NoweProdukty_opakowanie] i
INNER JOIN cte c
ON c.[id] = i.[id_nadrzedny_produkt]
)
SELECT
[id],
[id_produkt],
[id_nadrzedny_produkt],
[ilosc],
[id_typ_opakowania]
FROM cte
ORDER BY [Level];