create table Test (name varchar(20), class varchar(20), grade int) insert Test values('li', 'English', 70) insert Test values('li', 'Math', 80) insert Test values('li', 'Physics', 90) select name, sum(EG) TEG, sum(MG) TMG, sum(PG) TPG from ( select name, case when class = 'English' then grade else 0 end EG, case when class = 'Math' then grade else 0 end MG, case when class = 'Physics' then grade else 0 end PG from Test) tmp group by name