这样的数据库:
id sid name subject
3 1 张三 语文 98
4 1 张三 英语 65
5 1 张三 数学 88
6 2 李四 语文 55
7 2 李四 数学 96
8 2 李四 英语 86要求结果:
sid name 语文 英语 数学
1 张三 98 65 88
2 李四 55 86 96
咋实现?贴上phpmyadmin建表语句CREATE TABLE IF NOT EXISTS `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sid` int(11) NOT NULL,
  `name` varchar(100) CHARACTER SET utf8 NOT NULL,
  `subject` varchar(100) CHARACTER SET utf8 NOT NULL,
  `` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;--
-- 转存表中的数据 `student`
--INSERT INTO `student` (`id`, `sid`, `name`, `subject`, ``) VALUES
(3, 1, '张三', '语文', 98),
(4, 1, '张三', '英语', 65),
(5, 1, '张三', '数学', 88),
(6, 2, '李四', '语文', 55),
(7, 2, '李四', '数学', 96),
(8, 2, '李四', '英语', 86);

解决方案 »

  1.   

    select sid, `name` ,sum(if(`subject`='语文',``,0)) as 语文,
    sum(if(`subject`='数学',``,0)) as 数学,
    sum(if(`subject`='英语',``,0)) as 英语
    from `student` 
    group by sid, `name`
      

  2.   


    select sid,name,
    sum(case subject when '语文' then  else 0 end) as '语文',
    sum(case subject when '英语' then  else 0 end) as '英语',
    sum(case subject when '数学' then  else 0 end) as '数学'
    from student
    group by sid,name
      

  3.   

    sum是求和吗?为什么要求和?
      

  4.   

    实在理解不了为什么这样不对?SELECT sid,  `name` , IF(  `subject` =  '语文',  `` , 0 ) AS 语文, IF(  `subject` =  '数学',  `` , 0 ) AS 数学, IF(  `subject` =  '英语',  `` , 0 ) AS 英语
    FROM  `student`   
    GROUP BY sid,  `name` 
    LIMIT 0 , 30结果是sid name 语文 数学 英语
    1 张三 98 0 0
    2 李四 55 0 0
      

  5.   

    参考其中的多种方法http://blog.csdn.net/ACMAIN_CHM/archive/2009/06/19/4283943.aspx
    MySQL交叉表
      

  6.   

    交叉表查询, OR 将SUM->MAX