MySQL:如何将同一entity_id的两行数据转为SKU和IMAGE单列展示?
解决MySQL中按entity_id分组并转置不同attribute_id值为列的问题
嘿,这个需求用条件聚合就能轻松搞定!核心思路是通过分组和条件判断,把同一entity_id下不同attribute_id对应的value提取到同一行的不同列中。
具体SQL实现
假设你的表名为attribute(如果不是的话,替换成你的实际表名),可以用下面的查询语句:
SELECT entity_id, MAX(CASE WHEN attribute_id = 85 THEN value END) AS SKU, MAX(CASE WHEN attribute_id = 257 THEN value END) AS IMAGE FROM attribute GROUP BY entity_id;
代码解释
CASE WHEN attribute_id = 85 THEN value END:只筛选出attribute_id为85的value,其他行对应位置返回NULLMAX()函数:因为分组后同一entity_id下只有一条有效数据(其余是NULL),用MAX()可以忽略NULL,提取到有效的value值(如果每个entity_id对应每个attribute_id只有一条记录,用MIN()也能达到同样效果)GROUP BY entity_id:确保每个entity_id的结果只出现在一行
测试效果
用你提供的测试数据:
| attribute_id | entity_id | value |
|---|---|---|
| 85 | 220 | 4740 |
| 257 | 220 | image1.png |
执行上述SQL后,会得到你期望的结果:
| entity_id | SKU | IMAGE |
|---|---|---|
| 220 | 4740 | image1.png |
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

