DataGrid @EndPoint ) SELECT ASSY.[Level] AS [Level] ,CAST(ASSY.[Find] AS varchar(10)) AS [Find] --,ASSY.[Owner] ,ASSY.[Type] ,ASSY.[Number] AS [Number] ,[OpenItemId] AS [HK100] ,ASSY.[Iteration] --,ASSY.[ReleaseStatus] ,ASSY.[Description] ,ASSY.[Quantity] ,ASSY.[RefDes] ,ASSY.[Notes] ,Coalesce(S1.[OwnerShort],'') AS [Source1] ,Coalesce(S1.[Number],'') AS [SrcNumber1] ,Coalesce(S2.[OwnerShort],'') AS [Source2] ,Coalesce(S2.[Number],'') AS [SrcNumber2] ,Coalesce(S3.[OwnerShort],'') AS [Source3] ,Coalesce(S3.[Number],'') AS [SrcNumber3] ,Coalesce(S4.[OwnerShort],'') AS [Source4] ,Coalesce(S4.[Number],'') AS [SrcNumber4] ,Coalesce(S5.[OwnerShort],'') AS [Source5] ,Coalesce(S5.[Number],'') AS [SrcNumber5] FROM ( SELECT -- BOM with source pivot [Level] ,[Find] ,[Owner] ,[Type] ,[Number] ,[Iteration] ,[ReleaseStatus] ,[Description] ,[Quantity] ,[RefDes] ,[Notes] ,[Src001] ,[Src002] ,[Src003] ,[Src004] ,[Src005] ,[SortBy] ,[OpenItemId] FROM ( SELECT -- parent assembly '0' AS [Level] ,' ' AS [POwner] ,' ' AS [PType] ,' ' AS [PNumber] ,' ' AS [Find] ,[Owner] AS [Owner] ,[Type] AS [Type] ,[Number] AS [Number] ,[Revision] + ' (' + [Lifecycle] + ')' AS [Iteration] ,[ReleaseStatus] ,'1.0000 ' + [DefaultUoM] AS [Quantity] ,[Description] AS [Description] ,'' AS [RefDes] ,'' AS [Notes] ,'' AS [SrcRank] ,@EmptyGuid AS [SrcItemId] ,'000' AS [SortBy] ,[ItemId] AS [OpenItemId] FROM ( SELECT It.[Id] AS [ItemId] ,ItVw.[OwnerShort] AS [Owner] ,ItVw.[TypeShort] AS [Type] ,It.[ItemIdentifier] AS [Number] ,It.[Name] AS [Description] ,Rv.[Id] AS [RevId] ,Rv.[RevisionIdentifier] AS [Revision] ,RvLC.[Name] AS [Lifecycle] ,ItUom.[Name] AS DefaultUoM ,Rv.[FromNum] AS ActiveFrom ,Rv.[ToNum] AS ActiveTo ,CASE Rv.[RevState] WHEN 0 THEN 'Pending' WHEN 1 THEN 'Releasing' WHEN 2 THEN 'Released' WHEN 3 THEN 'Canceling' WHEN 4 THEN 'Canceled' ELSE 'Unknown' END AS [ReleaseStatus] FROM [BasicItemRevision_View] Rv INNER JOIN [BasicItem_View] It ON It.[Id] = Rv.[ItemId] INNER JOIN viewer.[ItemView] ItVw ON ItVw.[ItemId] = It.[Id] INNER JOIN [BusinessObject_View] ItUom ON ItUom.[Id] = It.PartUOM INNER JOIN [BusinessObject_View] RvLC ON RvLC.[Id] = Rv.[LifeCyclePhase] WHERE Rv.Id = @P1 ) AS Parent UNION ALL SELECT -- child component with ranked sources CAST(BOM.[Level] AS nvarchar(10)) AS [Level] ,PrntItm.OwnerShort AS [POwner] ,PrntItm.TypeShort AS [PType] ,PrntItm.Number AS [PNumber] ,Partlist.[Number] AS [Find] ,ChldItm.OwnerShort AS [Owner] ,ChldItm.TypeShort AS [Type] ,ChldItm.Number AS [Number] ,ChldRev.[RevisionIdentifier] + ' (' + ChldRvLC.[Name] +')' AS [Iteration] ,CASE ChldRev.RevState WHEN 0 THEN 'Pending' WHEN 1 THEN 'Releasing' WHEN 2 THEN 'Released' WHEN 3 THEN 'Canceling' WHEN 4 THEN 'Canceled' ELSE 'Unknown' END AS [ReleaseStatus] ,Cast(Convert(Decimal(18, 4), Partlist.[Quantity]) AS varchar(20)) + ' ' + Coalesce(Unt.[Name],ChldItm.[DefaultUOM]) ,ChldItm.[Description] AS [Description] ,Partlist.[ReferenceDesignator] AS [RefDes] ,Partlist.[Notes] AS [Notes] ,ChldSrc.[SrcRank] ,ChldSrc.[SrcItemId] AS [SrcItemId] ,BOM.TreeId AS [SortBy] ,ChldItm.[ItemId] AS [OpenItemId] FROM StructureItem_View AS Partlist INNER JOIN BOM ON BOM.Id=Partlist.Id AND Partlist.FromNum <= @EndPoint AND Partlist.ToNum > @EndPoint LEFT JOIN BusinessObject AS Unt ON Unt.Id = Partlist.UoM INNER JOIN viewer.ItemMasterView AS PrntItm ON PrntItm.ItemId = Partlist.ParentItem INNER JOIN viewer.ItemMasterView AS ChldItm ON ChldItm.ItemId = Partlist.BasicItem INNER JOIN BasicItemRevision_View AS ChldRev ON ChldRev.ItemId = ChldItm.ItemId AND ChldRev.FromNum <= @EndPoint AND ChldRev.ToNum > @EndPoint INNER JOIN [BusinessObject_View] AS ChldRvLC ON ChldRvLC.Id = ChldRev.LifeCyclePhase LEFT JOIN ChildSource ChldSrc ON ChldSrc.ParentItem=ChldItm.ItemId ) BOMSRC PIVOT ( Min([SrcItemId]) FOR [SrcRank] IN ([Src001], [Src002], [Src003], [Src004], [Src005]) ) AS PVT ) AS ASSY LEFT JOIN viewer.ItemView S1 ON S1.ItemId=Src001 LEFT JOIN viewer.ItemView S2 ON S2.ItemId=Src002 LEFT JOIN viewer.ItemView S3 ON S3.ItemId=Src003 LEFT JOIN viewer.ItemView S4 ON S4.ItemId=Src004 LEFT JOIN viewer.ItemView S5 ON S5.ItemId=Src005 ORDER BY SortBy ]]>