test

🧩 Syntax:
WITH MendixOrdersWithPrevious AS (
	SELECT *,
		LAG(CASE 
				WHEN ActualResourceName IS NOT NULL THEN ActualResourceName
				ELSE ResourceName
			END
		) OVER (PARTITION BY OrderNo ORDER BY OpNo) AS PreviousResource,
		CASE 
			WHEN ActualResourceName IS NOT NULL THEN ActualResourceName
			ELSE ResourceName
		END AS ResourceUsage
	FROM [FAI-MendixDB].dbo.MendixOrders
),
SubsequentResources AS (
	SELECT
		P.PartNo,
		P.Product,
		P.OpNo,
		P.OperationName AS fromOperation,
		P.Plant,
		P.Revisions,
		RG.Name AS ResourceGroup,
		R.Name AS ResourceName,
		R1.Name AS SubsequentResource,
		P1.OperationName AS SubsequentOperation
	FROM 
		[FAI-ASDB-DEV].UserData.Products P
		INNER JOIN [FAI-ASDB-DEV].UserData.ResourceGroups RG
			ON RG.ResourceGroupsId = P.ResourceGroup
		INNER JOIN [FAI-ASDB-DEV].UserData.ResourceGroupsResources RGR
			ON RGR.ResourceGroupsId = RG.ResourceGroupsId
		INNER JOIN [FAI-ASDB-DEV].UserData.Resources R
			ON R.ResourcesId = RGR.Resources
		INNER JOIN [FAI-ASDB-DEV].UserData.ProductsResourceData PRD
			ON PRD.ProductsId = P.ProductsId
			AND PRD.ResourceData = R.ResourcesId
		LEFT JOIN [FAI-ASDB-DEV].UserData.ResourceGroupsResources RGR1
			ON RGR1.ResourceGroupsId = PRD.SetSubsequentResourceGroup
		LEFT JOIN [FAI-ASDB-DEV].UserData.Resources R1
			ON R1.ResourcesId = RGR1.Resources
		LEFT JOIN [FAI-ASDB-DEV].UserData.Products P1
			ON P.PartNo = P1.PartNo
			AND P.__seq__Products + 1 = P1.__seq__Products
			AND P.Revisions = P1.Revisions
			AND P.Plant = P1.Plant
),
MendixOrdersSubsequentOperation AS (
	SELECT
		MO.OrderNo,
		MO.PartNo,
		MO.OperationName,
		MO.ResourceUsage,
		MO.Plant,
		CASE WHEN MO.PreviousResource IS NULL AND MSFG.FromResource IS NOT NULL THEN MSFG.FromResource
			ELSE MO.PreviousResource
			END AS PreviousResource

	FROM MendixOrdersWithPrevious MO
	LEFT JOIN SubsequentResources SR
		ON SR.PartNo = MO.PartNo
		AND MO.OperationName = SR.fromOperation
		AND MO.ResourceUsage = SR.ResourceName
		AND MO.Plant = SR.Plant
	LEFT JOIN [FAI-MendixDB].dbo.MendixSFGMaterial MSFG
		ON MSFG.ToOrderNo=MO.OrderNo
		AND MSFG.ToOpName=MO.OperationName
)
--select * from MendixOrdersSubsequentOperation

SELECT DISTINCT
	MOS.OrderNo,
	MOS.PartNo,
	MOS.OperationName,
	--MOS.ResourceUsage CurrentResource,
	MOS.PreviousResource PreviousResourceOperation,
	CASE WHEN SR.SubsequentResource IS NULL THEN SR1.ResourceName
		ELSE SR.SubsequentResource
		END AS ResourcesList
FROM 
	MendixOrdersSubsequentOperation MOS
	LEFT JOIN SubsequentResources SR
		ON SR.PartNo=MOS.PartNo
		AND SR.Plant=MOS.Plant
		AND SR.ResourceName=MOS.PreviousResource
		AND SR.SubsequentOperation=MOS.OperationName

	LEFT JOIN SubsequentResources SR1
		ON SR1.PartNo=MOS.PartNo
		AND SR1.fromOperation=MOS.OperationName
		AND SR1.Plant=MOS.Plant
		
WHERE MOS.OrderNo=100154769 
ORDER BY OrderNo