Definitely not a cross join. You want a "full outer join" (includes rows from both tables even when they don't match). Here's the basic idea (minus the "where" clause):

    COALESCE(fDays.DistrictID, sDays.DistrictID) DistrictID
    , fDays.DaysAllotted AS 'Jan.-Jun.'
    , sDays.DaysAllotted AS 'Jul.-Dec.'
    law_DeputyDaysAllotment fDays
    FULL OUTER JOIN law_DeputyDaysAllotment sDays ON
        fDays.DistrictID = sDays.DistrictID
        AND fDays.Year = sDays.Year
        AND fDays.Type = sDays.Type

I did this by hand and didn't check it, so there may be one or two syntax errors lurking in there.