加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL数据透视表的示例解析

发布时间:2022-01-21 13:33:39 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要为大家展示了MySQL数据透视表的示例分析,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下MySQL数据透视表的示例分析这篇文章吧。 我有一张这样的产品零件表: 部分 part_id part_type product_id -
      这篇文章主要为大家展示了“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
在实际实施中,将有数百万个产品部件
 
最佳答案
 
不幸的是,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数据透视表的示例分析”这篇文章的所有内容,感谢各位的阅读!

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读