join table and count them SQL based on segment
SELECT 
    Question,
    SUM(
        CASE  --Case for each column
            WHEN h."Children 0-5" = 'Children 0-5' THEN 1
            Else 0
        END) as "Children 0-5",
    SUM(
        CASE
           WHEN h."Children 6-12" = 'Children 0-5' THEN 1
           Else 0
        END as "Children 0-5"* from household h
 INNER JOIN survey s 
 ON h.user = s.user
 GROUP BY s.question, answer


Ok doing this from my brain rather than testing but here is the idea.  Use case statements to turn your string data into a sum-able number.  Then group by the question to aggregate the answers.

If I were you (and you could change the data) I would get away from verbose string fields and make things like the age groups Y, N or even better 1, 0.