1. 首页
  2. 技术知识

简单谈谈MySQL数据X表

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

部分

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动态X全部内容,希望文章能够帮你解决MySQL动态X所遇到的程序开发问题。

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/115821.html

联系我们