mysql 行转列和合并列

文中所用数据库格式如下
mysql 行转列和合并列

  1. 查询所有学生 ORACLE开发,J2EE从入门到精通,EJB及设计模式 这三门课程的分数
SELECT
		sc.grade,
		tc.cname,
		sc.sno 
	FROM
		t_score sc
		JOIN t_course tc ON sc.cno = tc.cno where cname='ORACLE开发' or cname='J2EE从入门到精通' or cname='EJB及设计模式’

我们查询出来的结果如下
mysql 行转列和合并列
要把它从行转为列,,sql 如下

SELECT
	t1.sno,
	MAX( CASE t1.cname WHEN 'ORACLE开发' THEN t1.grade ELSE 0 END ) ORACLE开发,
	MAX( CASE t1.cname WHEN 'J2EE从入门到精通' THEN t1.grade ELSE 0 END ) J2EE从入门到精通,
	MAX( CASE t1.cname WHEN 'EJB及设计模式' THEN t1.grade ELSE 0 END ) EJB及设计模式 
FROM
	(
	SELECT
		sc.grade,
		tc.cname,
		sc.sno 
	FROM
		t_score sc
		JOIN t_course tc ON sc.cno = tc.cno 
	) t1 
GROUP BY
	t1.sno

结果
mysql 行转列和合并列

  1. 将课程名字和成绩放在一列中,使用group_concat 函数
	-- 两列合并为一列
	SELECT
		sno,
		GROUP_CONCAT( cname, ':', grade ) AS 成绩 
	FROM
		t_score sc
		JOIN t_course co ON co.cno = sc.cno 
	GROUP BY
		sno

得到的结果如下
mysql 行转列和合并列

也可以使用concat(比较适用于姓和名字)

	-- 两列合为一列 
select concat(cno,cname) from t_course

mysql 行转列和合并列

上一篇:18-EasyNetQ:发生错误的情况


下一篇:【Redis】解析Redis和Java传递数据