这样的数据库:
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);
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);
sum(if(`subject`='数学',``,0)) as 数学,
sum(if(`subject`='英语',``,0)) as 英语
from `student`
group by sid, `name`
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
FROM `student`
GROUP BY sid, `name`
LIMIT 0 , 30结果是sid name 语文 数学 英语
1 张三 98 0 0
2 李四 55 0 0
MySQL交叉表