这个SQL查询怎么写?

gjf66924011 2015-06-29 12:58:10
详细描述:
科目表 course
id 科目
1 语文
2 数学
3 英语

成绩表 grade
姓名 科目 成绩
小明 语文 96
小明 数学 100
小明 英语 80

我希望查询的结果是:
姓名 语文 数学 英语
小明 96 100 80

请问怎么实现这样的查询?
...全文
113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
道玄希言 2015-06-29
  • 打赏
  • 举报
回复

CREATE TABLE `tbl07` (
  `nid` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `kemu` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `chji` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

INSERT INTO tbl07 (nid, kemu, chji) VALUES ('李明', '1', '95');
INSERT INTO tbl07 (nid, kemu, chji) VALUES ('李明', '2', '89');
INSERT INTO tbl07 (nid, kemu, chji) VALUES ('李明', '4', '74');


CREATE TABLE `tbl08` (
  `id` INT(11) DEFAULT NULL,
  `kemu` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


INSERT INTO tbl08(id, kemu) VALUES ('1', '语文');
INSERT INTO tbl08(id, kemu) VALUES ('2', '数学');
INSERT INTO tbl08(id, kemu) VALUES ('3', '英语');
INSERT INTO tbl08(id, kemu) VALUES ('4', '物理');
INSERT INTO tbl08(id, kemu) VALUES ('5', '化学');
动态


SET @sql := 'SELECT nid';
SELECT @sql := CONCAT(@sql, ', max(case kemu when ', id, ' then chji else 0 end) as ', kemu)
FROM (SELECT DISTINCT id, kemu FROM tbl08) AS a;
SELECT @sqlstr := CONCAT(@sql, ' from tbl07 group by nid');
PREPARE rc FROM @sqlstr;
EXECUTE rc;

道玄希言 2015-06-29
  • 打赏
  • 举报
回复
静态


    SELECT nid, 
    IFNULL((SELECT MAX(chji) FROM tbl07 WHERE kemu = '语文'), 0) AS '语文',  
    IFNULL((SELECT MAX(chji) FROM tbl07 WHERE kemu = '数学'), 0) AS '数学',      
    IFNULL((SELECT MAX(chji) FROM tbl07 WHERE kemu = '英语'), 0) AS '英语', 
    IFNULL((SELECT MAX(chji) FROM tbl07 WHERE kemu = '物理'), 0) AS '物理' 
    FROM tbl07  GROUP BY nid

ACMAIN_CHM 2015-06-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/acmain_chm/article/details/4283943 MySQL交叉表 在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义。http://topic.csdn.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?96198现整理解法如下:数据样本: create table tx( id int primary key, c1 c...
WWWWA 2015-06-29
  • 打赏
  • 举报
回复
SELECT 姓名,SUM(IF(科目='语文',成绩,0)) ,SUM(IF(科目='数学',成绩,0)) ,SUM(IF(科目='英语',成绩,0)) FROM grade GROUP BY 姓名

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧