交叉表查询中文,有关问题已解决,但是在查询出来的结果却多了一列。帮忙看看哪错了

交叉表查询中文,问题已解决,但是在查询出来的结果却多了一列。帮忙看看哪错了

下边是我写的存储过程:

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

交叉表查询中文,有关问题已解决,但是在查询出来的结果却多了一列。帮忙看看哪错了

相关文章:

你感兴趣的文章:

标签云: