MySQL如何编写SELECT查询将固定行的value值转为多列展示
MySQL固定行数行转列实现方案
因为你的表A行数固定为5条,不需要使用动态拼接SQL的方案,以下两种写法都可以实现需求:
方案1:条件聚合(推荐使用)
通过聚合函数配合条件判断逐行取值,性能更稳定,不会产生多表关联的笛卡尔积问题:
SELECT MAX(CASE WHEN 行标识字段 = 第一个值 THEN value END) AS col1, MAX(CASE WHEN 行标识字段 = 第二个值 THEN value END) AS col2, MAX(CASE WHEN 行标识字段 = 第三个值 THEN value END) AS col3, MAX(CASE WHEN 行标识字段 = 第四个值 THEN value END) AS col4, MAX(CASE WHEN 行标识字段 = 第五个值 THEN value END) AS col5 FROM A;
如果你的表A里有自增id字段作为行的唯一标识,直接把条件替换为id = 1、id = 2这类对应值即可。
方案2:自关联查询(匹配你尝试的写法逻辑)
将表A分别取别名对应5行记录,关联后取各自的value字段值:
SELECT row1.value AS col1, row2.value AS col2, row3.value AS col3, row4.value AS col4, row5.value AS col5 FROM A row1 INNER JOIN A row2 ON row2.id = 2 INNER JOIN A row3 ON row3.id = 3 INNER JOIN A row4 ON row4.id = 4 INNER JOIN A row5 ON row5.id = 5 WHERE row1.id = 1;
补充说明
如果后续业务变化行数不固定,需要列数动态适配行数,可以使用MySQL预处理语句实现动态行转列,当前固定5行的场景以上两种写法均可直接运行。
内容的提问来源于stack exchange,提问作者DevAra
相关产品推荐
相关产品推荐

