日期:2014-05-17  浏览次数:20607 次

sql 统计问题 求教啊
CREATE TABLE `stuscore` (   
  `id` int(11) NOT NULL auto_increment,   
  `name` varchar(20) default NULL,   
  `subject` varchar(20) default NULL,   
  `score` varchar(20) default NULL,   
  `stuid` varchar(10) default NULL,   
  PRIMARY KEY  (`id`)   
) ENGINE=InnoDB DEFAULT CHARSET=utf8;   
  
/*Data for the table `stuscore` */   
  
insert  into `stuscore`(`id`,`name`,`subject`,`score`,`stuid`) values    
(1,'张三','数学','89','1'),   
(2,'张三','语文','80','1'),   
(3,'张三','英语','70','1'),   
(4,'李四','数学','90','2'),   
(5,'李四','语文','70','2'),   
(6,'李四','英语','80','2');  

这是此表,想要实现:

序号--名字--数学--语文--英语
 1 ---张三--89----80-----70  格式的统计 求教啊,
------解决方案--------------------
sql 行转列 。
------解决方案--------------------
select t.user_name as 姓名, 
  sum(decode(t.course, '语文', score,null)) as 语文, 
  sum(decode(t.course, '数学', score,null)) as 数学, 
  sum(decode(t.course, '英语', score,null)) as 英语 
from test_tb_grade t 
group by t.user_name 
order by t.user_name