交叉表查询中文,问题已解决,但是在查询出来的结果却多了一列。帮忙看看哪错了
下边是我写的存储过程:
create procedure test1()
begin
DECLARE done int default 0;
DECLARE asubject CHAR(20) character set gbk;
DECLARE str VARCHAR(1000) default '';
DECLARE cur1 CURSOR FOR select DISTINCT subject from test ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
open cur1;
REPEAT
if not done then
FETCH cur1 INTO asubject;
set str=CONCAT(str, ',', 'SUM(if(subject=''', asubject, ''', sources, 0))', '''', asubject,'''');
end IF;
UNTIL done END REPEAT;
set @sqlString=CONCAT(' select number as 学号',str, ' from test group by number ');
prepare sqlstmt from @sqlString;
execute sqlstmt;
deallocate prepare sqlstmt;
end
结果:
学号 语文 数学 英语 英语1
1 60 70 75 75
2 55 53 75 75
3 80 0 0 0
4 0 0 0 0
5 0 0 91 91
表里面是没有英语1这一科目的,但是查询出来的却多而来这一列
------解决方案--------------------打印出来这个变量看看就知道了
------解决方案--------------------set @sqlString=CONCAT(' select number as 学号',str, ' from test group by number ');
这句下面
select @sqlString;
------解决方案--------------------create procedure test1()
begin
DECLARE done int default 0;
DECLARE asubject CHAR(20) character set gbk;
DECLARE str VARCHAR(1000) default '';
DECLARE cur1 CURSOR FOR select DISTINCT subject from test ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
open cur1;
REPEAT
FETCH cur1 INTO asubject;
if not done then
set str=CONCAT(str, ',', 'SUM(if(subject=''', asubject, ''', sources, 0))', '''', asubject,'''');
end IF;
UNTIL done END REPEAT;
set @sqlString=CONCAT(' select number as 学号',str, ' from test group by number ');
prepare sqlstmt from @sqlString;
execute sqlstmt;
deallocate prepare sqlstmt;
end