参考:
MySQL 实现行转列SQL
sql的行转列(PIVOT)与列转行(UNPIVOT)
行转列:把表中特定列的数据去重后做为列名,通常数据条数变少;
列转行:可以说是行转列的反转,把表中特定列做为每一行数据对应列的值,通常数据条数变多;
1.常用方法:
1.1.PIVOT与UNPIVOT
1.2.根据特定列进行分组,对每个要变成列的值分别进行max、case when处理
SELECT
SNAME,
MAX(
CASE CNAME
WHEN 'JAVA' THEN
SCORE
ELSE
0
END
) JAVA,
MAX(
CASE CNAME
WHEN 'mysql' THEN
SCORE
ELSE
0
END
) mysql
FROM
stdscore
GROUP BY
1.3.同表进行表连接,对每个要变成列的值分别进行where条件处理
SELECT DISTINCT a.sname,
(SELECT score FROM stdscore b WHERE a.sname=b.sname AND b.CNAME='JAVA' ) AS 'JAVA',
(SELECT score FROM stdscore b WHERE a.sname=b.sname AND b.CNAME='mysql' ) AS 'mysql'
FROM stdscore a