
存储过程实现行转列select name, sum( case subject when 'chinese' then score else 0 end) as 'chinese', sum( case subject when 'math' then score else 0 end) as 'math', sum( case subject when 'english' then score else 0 end) as 'english' from user group by name;
在写存储过程的时候遇到了两个问题,分别是关于游标和临时表。create procedure line_to_col() begin declare i int; declare _chinese int; declare _math int; declare _english int; declare _name varchar(10); declare test_cursor CURSOR for select name from user; select count(*) into i from user; CREATE TEMPORARY TABLE tmp_tab( name varchar(10), chinese_score int, math_socre int, english_score int); if i> 0 then open test_cursor; repeat fetch test_cursor into _name; select score into _chinese from user where subject = 'chinese' and name =_name; select score into _math from user where subject = 'math' and name =_name; select score into _english from user where subject = 'english' and name =_name; insert into tmp_tab values(_name,_chinese,_math,_english); set i=i-1; until i=0 end repeat; close test_cursor; end if; select DISTINCT * from tmp_tab; drop table tmp_tab; end