• Andy. I was messing around with your spreadsheet today and this is what I came up with in my attempt to understand what the BOL procedure is doing. I would not use this if I were you, but it might help you see what you are asking of your tables.

    --THIS IS NOT THE BEST THING TO DO! but I think it will work. Somewhat.

    --You probably should take Jeff's suggestion about looking at BOL

    --Create a Temp table to hold your heirarchy. Probably could be made into procedure.

    IF OBJECT_ID('TempDB..#BOM','u') IS NOT NULL

    DROP TABLE #BOM

    GO

    CREATE TABLE #BOM

    (

    ID INT IDENTITY(1,1),

    Field1 VARCHAR(100),

    Field2 VARCHAR(100),

    FIeld3 VARCHAR(100),

    Field4 VARCHAR(100),

    Field5 VARCHAR(100),

    Field6 VARCHAR(100),

    BOM_Level INT,

    PRIMARY KEY (ID)

    )

    --Insert the Parent Codes that are never children and set the BOM_Level to 1

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    Field1,Field2,Field3,Field4,Field5,Field6,1

    FROM BOM

    WHERE Field2 IN ('P','M')

    AND SUBSTRING(Field6,1,3) = 'S/A'

    AND Field1 NOT IN (SELECT DISTINCT Field3 FROM BOM)

    --Insert the Parent Codes that are also children, and set the BOM_Level = 2

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,2

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level = 1)

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 3

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,3

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 4

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,4

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2,3))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2,3))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 5

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,5

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2,3,4))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2,3,4))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 6

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,6

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 7

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,7

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 8

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,8

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6,7))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6,7))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 9

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,9

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6,7,8))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6,7,8))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --Level 10

    INSERT INTO #BOM (Field1,Field2,Field3,Field4,Field5,Field6,BOM_Level)

    SELECT

    b1.Field1,b1.Field2,b1.Field3,b1.Field4,b1.Field5,b1.Field6,10

    FROM BOM b1,

    #BOM b2

    WHERE b1.Field1 = b2.Field3

    AND b1.Field3 NOT IN (SELECT DISTINCT Field3 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6,7,8,9))

    AND b1.Field1 NOT IN (SELECT DISTINCT Field1 FROM #BOM WHERE BOM_Level IN (1,2,3,4,5,6,7,8,9))

    AND SUBSTRING(b1.Field6,1,3) = 'S/A'

    AND b1.Field2 IN ('P','M')

    --You can see that this is ridiculously redundant, and you would have to hard code

    --for every level of nesting as I did for 1 through 10. As I said, this probably

    --could be made into a procedure (like the one in BOL), but that is beyond my

    --ability right now.

    --The below will only work to return the values you specified in your post example .xls

    --Like the above you will have to hard code every level above 2, but since I only needed

    --2 for your example thats all I did.

    --Good luck, and I hope you find a better way.

    DECLARE @ParentCode VARCHAR(100)

    SELECT @ParentCode = 'TX5922.AA'

    SELECT *

    FROM #BOM

    WHERE BOM_Level = 1

    AND Field1 = @ParentCode

    AND Field2 IN ('M','P')

    AND SUBSTRING(Field6,1,10) = 'S/A OF PCB'

    UNION

    SELECT

    b1.*

    FROM #BOM b1,

    #BOM b2

    WHERE b2.Field3=b1.Field1

    AND b1.BOM_Level = 2

    AND SUBSTRING(b1.Field6,1,10) = 'S/A OF PCB'

    AND b1.Field1 NOT IN

    (

    SELECT

    Field1

    FROM #BOM

    WHERE BOM_Level = 1

    AND Field1 = @ParentCode

    AND Field2 IN ('M','P')

    AND SUBSTRING(Field6,1,3) = 'S/A'

    )

    Greg
    _________________________________________________________________________________________________
    The glass is at one half capacity: nothing more, nothing less.