简单谈谈MySQL数据透视表
程序员文章站
2022-03-18 13:26:37
我有一张这样的产品零件表:
部分
part_id part_type product_id
---------------------------...
我有一张这样的产品零件表:
部分
part_id part_type product_id -------------------------------------- 1 a 1 2 b 1 3 a 2 4 b 2 5 a 3 6 b 3
我想要一个返回如下表格的查询:
product_id part_a_id part_b_id ---------------------------------------- 1 1 2 2 3 4 3 5 6
在实际实施中,将有数百万个产品部件
最佳答案
不幸的是,mysql没有pivot功能,但您可以使用聚合函数和case语句对其进行建模.对于动态版本,您需要使用预准备语句:
set @sql = null; select group_concat(distinct concat( 'max(case when part_type = ''',part_type,''' then part_id end) as part_','_id' ) ) into @sql from parts; set @sql = concat('select product_id,',@sql,' from parts group by product_id'); prepare stmt from @sql; execute stmt; deallocate prepare stmt;
如果您只有几列,那么您可以使用静态版本:
select product_id,max(case when part_type ='a' then part_id end) as part_a_id,max(case when part_type ='b' then part_id end) as part_b_id from parts group by product_id
总结
以上是为你收集整理的mysql动态透视全部内容,希望文章能够帮你解决mysql动态透视所遇到的程序开发问题。