SQL动态字段转列实现:如何输出指定DataEntry的行转列查询结果
解决方案
MySQL 原生不支持 PIVOT 关键字,你可以通过条件聚合的方式实现行转列需求,对应SQL语句如下:
SELECT 1 AS RowId, MAX(CASE WHEN field_name = 'field1' THEN field_value END) AS field1, MAX(CASE WHEN field_name = 'field2' THEN field_value END) AS field2, MAX(CASE WHEN field_name = 'field3' THEN field_value END) AS field3, MAX(CASE WHEN field_name = 'field4' THEN field_value END) AS field4 FROM entry_fields WHERE data_entry_id = 1;
实现说明
- 逻辑核心是
CASE条件判断加聚合函数:每个CASE语句只会匹配对应字段名的取值,外层用MAX(也可以替换为MIN,因为同一条data_entry_id下每个字段名只会对应一条记录,聚合函数仅用于合并多行空值、输出单行结果)。 WHERE子句直接筛选你需要查询的data_entry_id=1的记录,如果你需要适配多个条目查询,可以把1 AS RowId替换为data_entry_id AS RowId,再调整WHERE条件即可。- 上述写法针对固定字段名的场景,如果你的字段是动态不固定的,可以使用动态SQL拼接语句实现,静态写法的查询性能和稳定性更高。
内容的提问来源于stack exchange,提问作者Kerby82
相关产品推荐
相关产品推荐

