开发者社区> 问答> 正文

MySQL动态枢轴?mysql

我有一张这样的产品零件表:

部分

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 在其实际实施中,将有数百万个产品零件

展开
收起
保持可爱mmm 2020-05-16 22:21:40 450 0
1 条回答
写回答
取消 提交回答
  • 不幸的是,MySQL没有PIVOT函数,但是您可以使用聚合函数和CASE语句对其进行建模。对于动态版本,您将需要使用准备好的语句:

    SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when part_type = ''', part_type, ''' then part_id end) AS part_', part_type, '_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; 请参见带有演示的SQL Fiddle

    如果只有几列,则可以使用静态版本:

    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来源:stack overflow

    2020-05-16 22:22:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像