• ChrisM@Work (4/26/2013)[/b

    Look at the work you will have to do when you want to bring each of those phone numbers into line with a parent row:

    SELECT p.*,

    [mobile 1]= f1.PhoneNum,

    [mobile 2]= f2.PhoneNum,

    [home]= f3.PhoneNum,

    [office 1]= f4.PhoneNum,

    [office 2]= f5.PhoneNum

    FROM Persons p

    LEFT JOIN PhoneNumbers f1

    ON f1.PersonID = p.PersonID AND f1.DeviceType = 'mobile 1'

    LEFT JOIN PhoneNumbers f2

    ON f2.PersonID = p.PersonID AND f2.DeviceType = 'mobile 2'

    LEFT JOIN PhoneNumbers f3

    ON f3.PersonID = p.PersonID AND f3.DeviceType = 'home'

    LEFT JOIN PhoneNumbers f4

    ON f4.PersonID = p.PersonID AND f4.DeviceType = 'office 1'

    LEFT JOIN PhoneNumbers f5

    ON f5.PersonID = p.PersonID AND f5.DeviceType = 'office 2'

    SELECT p.*, x.*

    FROM Persons p

    CROSS APPLY (

    SELECT

    [mobile 1]= MAX(CASE WHEN f1.DeviceType = 'mobile 1' THEN PhoneNum END),

    [mobile 2]= MAX(CASE WHEN f1.DeviceType = 'mobile 2' THEN PhoneNum END),

    [home]= MAX(CASE WHEN f1.DeviceType = 'home' THEN PhoneNum END),

    [office 1]= MAX(CASE WHEN f1.DeviceType = 'office 1' THEN PhoneNum END),

    [office 2]= MAX(CASE WHEN f1.DeviceType = 'office 2' THEN PhoneNum END)

    FROM PhoneNumbers f1

    WHERE f1.PersonID = p.PersonID

    ) x

    It is not necessary to query per device type, as only the parent ID and parent type can be supplied to return X amount of records of varying phone types.

    SELECT * FROM PhoneNumbers WHERE Parent = 'ManagerUniqueID' AND ParentType = 'Manager'