简单谈谈MySQL数据透视表

 更新时间:2019-08-11 12:01:44   作者:佚名   我要评论(0)

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


part_id part_type product_id
--------------------------------------
1 A 1
2 B 1
3

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

部分

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动态透视所遇到的程序开发问题。

相关文章

  • 简单谈谈MySQL数据透视表

    简单谈谈MySQL数据透视表

    我有一张这样的产品零件表: 部分 part_id part_type product_id -------------------------------------- 1 A 1 2 B 1 3
    2019-08-11
  • Linux curl表单登录或提交与cookie使用详解

    Linux curl表单登录或提交与cookie使用详解

    前言 本文主要讲解通过curl 实现表单提交登录。单独的表单提交与表单登录都差不多,因此就不单独说了。 说明:针对curl表单提交实现登录,不是所有网站都适用
    2019-08-11
  • kotlin实现通知栏提醒功能示例代码

    kotlin实现通知栏提醒功能示例代码

    一、概述 2019年英雄联盟LPL赛区赛季赛打得火热,作为一个RNG粉丝,想通过app实现RNG赛程提醒,于是就有了这次技术实践。我在网上找了很久,几乎没找到使用ko
    2019-08-11
  • MySQL中“:=”和“=”的区别浅析

    MySQL中“:=”和“=”的区别浅析

    = 只有在set和update时才是和:=一样,赋值的作用,其它都是等于的作用。鉴于此,用变量实现行号时,必须用:=。 := 不只在set和update时时赋值的作用,在selec
    2019-08-08
  • 图文介绍mysql中:=和=的区别

    图文介绍mysql中:=和=的区别

    :=和=的区别 = 只有在set和update时才是和:=一样,赋值的作用,其它都是等于的作用。鉴于此,用变量实现行号时,必须用:= := 不只在set和u
    2019-08-08
  • Flutter利用注解生成可自定义的路由的实现

    Flutter利用注解生成可自定义的路由的实现

    route_generator是什么 这是一个简单的 Flutter 路由生成库,只需要少量的代码,然后利用注解配合源代码生成,自动生成路由表,省去手工管理路由代码的烦恼
    2019-08-08
  • Python学习笔记之迭代器和生成器用法实例详解

    Python学习笔记之迭代器和生成器用法实例详解

    本文实例讲述了Python学习笔记之迭代器和生成器用法。分享给大家供大家参考,具体如下: 迭代器和生成器 迭代器 每次可以返回一个对象元素的对象,例如返回
    2019-08-08
  • 详解解决Python memory error的问题(四种解决方案)

    详解解决Python memory error的问题(四种解决方案)

    昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条
    2019-08-08
  • Python判断字符串是否xx开始或结尾的示例

    Python判断字符串是否xx开始或结尾的示例

    判断是否xx开始 使用startswith 示例代码: String = "12345 上山打老虎" if str(String).startswith('1'): #判断String是否以“虎”结尾 print("有老虎
    2019-08-08
  • Python实现Singleton模式的方式详解

    Python实现Singleton模式的方式详解

    前言 使用python实现设计模式中的单例模式。单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的。本文将简要介绍一下python中实现单例模
    2019-08-08

最新评论