欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql 行转列和合并列

程序员文章站 2022-05-18 18:36:51
...

文中所用数据库格式如下
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 行转列和合并列

相关标签: 数据库相关