Microsoft SQL Server 2005
Advanced SQL Best Practices

How to prepare a BOM assembly report for all products?

Ken Sanchez, CEO of AdventureWorks Cycles asked you (the DBA, lead developer) to prepare a bill-of-materials (BOM) assembly report for all priced products. The product management team is going to have an offsite meeting at the Sunrise Lodge on Mount Rainier to streamline production in order to increase profit margin. You have to use a recursive CTE since some of the components require assembly as well.

USE AdventureWorks;

GO

WITH cteParts(AssembledProduct, AssemblyID, ComponentID, PerAssemblyQty, ComponentLevel) AS

(

    SELECT AssembledProduct = p.Name, b.ProductAssemblyID, b.ComponentID,

         b.PerAssemblyQty,

        1 AS ComponentLevel

    FROM Production.BillOfMaterials AS b

    INNER JOIN Production.Product p

    on p.ProductID = b.ProductAssemblyID

    WHERE ListPrice > 0.0

          AND b.EndDate IS NULL

    UNION ALL

    SELECT AssembledProduct, bom.ProductAssemblyID,

           bom.ComponentID, p.PerAssemblyQty,

           ComponentLevel + 1

    FROM Production.BillOfMaterials AS bom

        INNER JOIN cteParts AS p

        ON bom.ProductAssemblyID = p.ComponentID

        AND bom.EndDate IS NULL

)

SELECT      AssembledProduct,

            AssemblyItem=pr1.Name,

            ComponentName=pr.Name,

            ComponentLevel,

            PerAssemblyQty = CONVERT(int, PerAssemblyQty),

            Color = coalesce(pr.Color, ''),

            Weight = coalesce(convert(varchar,pr.Weight) +' '+

                     pr.WeightUnitMeasureCode,'')

FROM cteParts AS p

    INNER JOIN Production.Product AS pr

    ON p.ComponentID = pr.ProductID

    INNER JOIN Production.Product AS pr1

    ON p.AssemblyID = pr1.ProductID

ORDER BY AssembledProduct, ComponentLevel, AssemblyID, ComponentID;

GO

 

 

Partial Results:

AssembledProduct AssemblyItem ComponentName ComponentLevel PerAssemblyQty Color Weight
Front Derailleur Front Derailleur Front Derailleur Cage 1 1 Silver
Front Derailleur Front Derailleur Front Derailleur Linkage 1 1 Silver
HL Bottom Bracket HL Bottom Bracket BB Ball Bearing 1 10
HL Bottom Bracket HL Bottom Bracket HL Shell 1 1
HL Bottom Bracket BB Ball Bearing Bearing Ball 2 10
HL Bottom Bracket BB Ball Bearing Lock Ring 2 10 Silver
HL Bottom Bracket BB Ball Bearing Cup-Shaped Race 2 10
HL Bottom Bracket BB Ball Bearing Cone-Shaped Race 2 10
HL Crankset HL Crankset HL Crankarm 1 2 Black
HL Crankset HL Crankset Chainring Bolts 1 3 Silver
HL Crankset HL Crankset Chainring Nut 1 3 Silver
HL Crankset HL Crankset Chainring 1 3 Black
HL Crankset HL Crankset Freewheel 1 1 Silver
HL Fork HL Fork Blade 1 2
HL Fork HL Fork Fork End 1 2
HL Fork HL Fork Fork Crown 1 1
HL Fork HL Fork Steerer 1 1
HL Fork Blade Metal Sheet 5 2 2
HL Fork Fork End Metal Sheet 2 2 2
HL Fork Fork Crown Metal Sheet 5 2 1
HL Fork Steerer Metal Sheet 6 2 1
HL Headset HL Headset Adjustable Race 1 1
HL Headset HL Headset Headset Ball Bearings 1 8
HL Headset HL Headset Crown Race 1 1
HL Headset HL Headset Keyed Washer 1 1
HL Headset HL Headset Lock Nut 19 1 1
HL Headset HL Headset Lower Head Race 1 1
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Chain Stays 1 2
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Decal 1 1 2
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Decal 2 1 1
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Down Tube 1 1
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Head Tube 1 1
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Paint - Black 1 8
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Seat Stays 1 4
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Seat Tube 1 1
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 Top Tube 1 1
HL Mountain Frame - Black, 38 HL Mountain Frame - Black, 38 HL Fork 1 1
HL Mountain Frame - Black, 38 Chain Stays Metal Sheet 5 2 2
HL Mountain Frame - Black, 38 Down Tube Metal Sheet 3 2 1
HL Mountain Frame - Black, 38 Head Tube Metal Sheet 4 2 1
HL Mountain Frame - Black, 38 Seat Stays Metal Sheet 7 2 4
HL Mountain Frame - Black, 38 Seat Tube Metal Bar 2 2 1
HL Mountain Frame - Black, 38 Top Tube Metal Sheet 2 2 1
HL Mountain Frame - Black, 38 HL Fork Blade 2 1
HL Mountain Frame - Black, 38 HL Fork Fork End 2 1
HL Mountain Frame - Black, 38 HL Fork Fork Crown 2 1
HL Mountain Frame - Black, 38 HL Fork Steerer 2 1
HL Mountain Frame - Black, 38 Blade Metal Sheet 5 3 1
HL Mountain Frame - Black, 38 Fork End Metal Sheet 2 3 1
HL Mountain Frame - Black, 38 Fork Crown Metal Sheet 5 3 1
HL Mountain Frame - Black, 38 Steerer Metal Sheet 6 3 1
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Chain Stays 1 2
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Decal 1 1 2
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Decal 2 1 1
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Down Tube 1 1
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Head Tube 1 1
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Paint - Black 1 8
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Seat Stays 1 4
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Seat Tube 1 1
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 Top Tube 1 1
HL Mountain Frame - Black, 42 HL Mountain Frame - Black, 42 HL Fork 1 1
HL Mountain Frame - Black, 42 Chain Stays Metal Sheet 5 2 2
HL Mountain Frame - Black, 42 Down Tube Metal Sheet 3 2 1
HL Mountain Frame - Black, 42 Head Tube Metal Sheet 4 2 1
HL Mountain Frame - Black, 42 Seat Stays Metal Sheet 7 2 4
HL Mountain Frame - Black, 42 Seat Tube Metal Bar 2 2 1
HL Mountain Frame - Black, 42 Top Tube Metal Sheet 2 2 1
HL Mountain Frame - Black, 42 HL Fork Blade 2 1
HL Mountain Frame - Black, 42 HL Fork Fork End 2 1
HL Mountain Frame - Black, 42 HL Fork Fork Crown 2 1
HL Mountain Frame - Black, 42 HL Fork Steerer 2 1
HL Mountain Frame - Black, 42 Blade Metal Sheet 5 3 1
HL Mountain Frame - Black, 42 Fork End Metal Sheet 2 3 1
HL Mountain Frame - Black, 42 Fork Crown Metal Sheet 5 3 1
HL Mountain Frame - Black, 42 Steerer Metal Sheet 6 3 1
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Chain Stays 1 2
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Decal 1 1 2
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Decal 2 1 1
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Down Tube 1 1
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Head Tube 1 1
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Paint - Black 1 8
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Seat Stays 1 4
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Seat Tube 1 1
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 Top Tube 1 1
HL Mountain Frame - Black, 44 HL Mountain Frame - Black, 44 HL Fork 1 1
HL Mountain Frame - Black, 44 Chain Stays Metal Sheet 5 2 2
HL Mountain Frame - Black, 44 Down Tube Metal Sheet 3 2 1
HL Mountain Frame - Black, 44 Head Tube Metal Sheet 4 2 1
HL Mountain Frame - Black, 44 Seat Stays Metal Sheet 7 2 4
HL Mountain Frame - Black, 44 Seat Tube Metal Bar 2 2 1
HL Mountain Frame - Black, 44 Top Tube Metal Sheet 2 2 1
HL Mountain Frame - Black, 44 HL Fork Blade 2 1
HL Mountain Frame - Black, 44 HL Fork Fork End 2 1
HL Mountain Frame - Black, 44 HL Fork Fork Crown 2 1
HL Mountain Frame - Black, 44 HL Fork Steerer 2 1
HL Mountain Frame - Black, 44 Blade Metal Sheet 5 3 1
HL Mountain Frame - Black, 44 Fork End Metal Sheet 2 3 1
HL Mountain Frame - Black, 44 Fork Crown Metal Sheet 5 3 1
HL Mountain Frame - Black, 44 Steerer Metal Sheet 6 3 1
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Chain Stays 1 2
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Decal 1 1 2
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Decal 2 1 1
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Down Tube 1 1
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Head Tube 1 1
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Paint - Black 1 8
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Seat Stays 1 4
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Seat Tube 1 1
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 Top Tube 1 1
HL Mountain Frame - Black, 46 HL Mountain Frame - Black, 46 HL Fork 1 1
HL Mountain Frame - Black, 46 Chain Stays Metal Sheet 5 2 2

 

The Best SQL Server 2005 Training in the World
 
 
SQLUSA.com Home Page