欢迎来到代码驿站!

Mysql

当前位置:首页 > 数据库 > Mysql

简单谈谈MySQL数据透视表

时间:2021-05-31 08:23:41|栏目: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

在实际实施中,将有数百万个产品部件

最佳答案

不幸的是,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中LIKE子句相关使用的学习教程

栏    目:Mysql

下一篇:mysql居然还能实现分布式锁的方法

本文标题:简单谈谈MySQL数据透视表

本文地址:http://www.codeinn.net/misctech/132231.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有