0
select ds.school_name_np,
case
    when (ds.gender_id = 1 and ds.class=1) then ds.no_of_student 
end as boys_1,
case
    when (ds.gender_id = 2 and ds.class=1) then ds.no_of_student
end as girls_1,
case
    when (ds.gender_id = 1 and ds.class=2) then ds.no_of_student
end as boys_2,
case
    when (ds.gender_id = 2 and ds.class=2) then ds.no_of_student
end as girls_2
from data_047_differntly_abled_school_summary ds
-- GROUP BY school_name_np, gender_id, class, no_of_student
ORDER BY school_name_np

I have the above query that generates result as follows:

enter image description here

How do I get results for the same school in a single row?

1
  • array_agg or string_agg and GROUP BY ... HAVING ... Commented Aug 24, 2017 at 6:50

1 Answer 1

1

Simply use an aggregation function on each column:

select ds.school_name_np,
       MAX(case when ds.gender_id = 1 and ds.class=1 then s.no_of_student end) as boys_1,
       MAX(case.....),
       ...
from data_047_differntly_abled_school_summary ds
GROUP BY school_name_np
ORDER BY school_name_np
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.