前提:
MySql 中行转列,列转行与Oracle大同小异,思路一样!但是Oracle 是有自己的函数进行单独处理的,首先我们先了解一下传统的Sql进行行转列、列转行操作。
建表并录入几条数据进行测试使用,数据具体如下所示:
根据上图所示的数据我们可以进行列转行的Sql书写,具体Sql如下所示:
行转列(CASE WHEN、IF函数都行),都能解决我们行转列的需求:
SELECT
userid,
MAX(CASE WHEN subject ='语文' THEN score ELSE 0 END) '语文',
MAX(CASE WHEN subject ='数学' THEN score ELSE 0 END) '数学',
MAX(CASE WHEN subject ='英语' THEN score ELSE 0 END) '英语'
FROM tb_score
GROUP BY userid;
结果如下所示:
行转列(UNION、UNION ALL根据需求合理的使用):
根据上面的结果进行回转操作: