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.'
FULL OUTER JOIN law_DeputyDaysAllotment sDays ON
fDays.DistrictID = sDays.DistrictID
AND fDays.Year = sDays.Year
AND fDays.Type = sDays.Type