当前位置: 首页 > 知识库问答 >
问题:

MySQL中的行到列转换

师曦
2023-03-14

我在MySQL中有这样的结果集:

ID          Type Email          Degignation  
1000000000  202 brijesh@abc.com Entrepreneur
1000000000  234 brijesh@abc.com Engineering,Development
1000000000  239 brijesh@abc.com CTO

我有很多这样的元组,不仅仅是三个。 我希望Type为column,最后一列为它们的row value。 如下所示

ID                202         234                     239        Email 
1000000000   Entrepreneur  Engineering,Development    CTO       brijesh@abc.com

共有2个答案

朱锐
2023-03-14

虽然Bill Karwin的答案是正确的,但是查询必须知道定义的列集,但是对于动态数据透视查询,有一种使用group_concat的方法

SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
  CONCAT('MAX(CASE WHEN `Type` = ''',
         `Type`, 
         ''' THEN Degignation END) `Type_',
         `Type`,
         '`'
         )

 )
  INTO @sql
  FROM t;

SET @sql = CONCAT('SELECT ID, ', @sql, ', Email 
                     FROM t 
                    GROUP BY ID,Email');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

参见演示

但是当使用group_concat时,它有1024个字符的默认连接限制,并且剩余的结果将被截断,因此如果您有很多不同的类型,那么这将很棘手,尽管您可以增加group_concat长度约束的限制,如手册中所述,但是它也依赖于max_allowed_packet

澹台季萌
2023-03-14

这称为透视表。 制作起来有点尴尬:

SELECT ID, 
 MAX(CASE Type WHEN 202 THEN Degignation END) AS `202`
 MAX(CASE Type WHEN 234 THEN Degignation END) AS `234`
 MAX(CASE Type WHEN 239 THEN Degignation END) AS `239`
 Email
FROM mytable
GROUP BY ID, Email

请注意,在编写查询之前,必须知道所有不同的type值。 SQL不允许结果集在发现表中的数据值时动态添加更多列。 列必须在查询准备时固定。

 类似资料:
  • 本文向大家介绍MySQL 中行转列的方法,包括了MySQL 中行转列的方法的使用技巧和注意事项,需要的朋友参考一下 MySQL行转列操作     所谓的行转列操作,就是将一个表的行信息转化为列信息,说着可能比较笼统,这里先举个例子,如下:     上面的例子中,表1给出了三个学生的三门成绩,而表2是将表1的行记录信息(学科、姓名)转化为列信息,并根据不同的user_name进行分组显示。 1 ca

  • 问题内容: 我有一个带有列的详细信息表: user_id int 代码int 值int 我想建立一个汇总表,如下所示: user_id int valueA int valueB int 在详细信息表中,valueA对应于说代码5,而valueB对应于说代码6,所以我正在寻找类似的东西: 插入摘要(user_id,valueA,valueB)VALUES(从详细信息中选择???); 当然,问题是我

  • 问题内容: 我有桌子 返回的值是 如何将这些数据从行转移到列?我要这样 问题答案:

  • 本文向大家介绍mysql 行转列和列转行实例详解,包括了mysql 行转列和列转行实例详解的使用技巧和注意事项,需要的朋友参考一下 mysql行转列、列转行  语句不难,不做多余解释了,看语句时,从内往外一句一句剖析 行转列        有如图所示的表,现在希望查询的结果将行转成列        建表语句如下:        查询语句:        此处用之所以用MAX是为了将无数据的点设为0

  • 问题内容: 如何在MySQL查询中将行转换为列? 问题答案: 您可以使用将行转换 为 列,但不能以任何自动方式转置整个结果集。您可以编写一个查询来手动生成每个列,或者在应用程序中执行。 这是有关编写复杂查询以模拟换位的教程: http://www.artfulsoftware.com/infotree/queries.php#78

  • 问题内容: 我有一个简单的查询,它产生以下结果: 我想将行转置为列。 我了解mysql没有枢轴功能,因此需要工会,但不能100%确定。 先谢谢您的帮助。 问题答案: 您可以使用这样的交叉表来做到这一点- 另外,您应该将transporttype值移动到查找表中,并在该表中包含transporttype_id。

  • 问题内容: MySQL是否可以将列转换为行,从而动态添加行所需的列数。我认为我的问题可能与数据透视表有关,但是我不确定,除了给出以下示例之外,我不知道如何构造此问题。 给定两个表A和B,它们看起来像 表A 我想编写一个如下查询: 结果表 基本上,我想将表B中的每一行变成结果表中的一列。如果有一个新条目被添加到表B中,id = 1,那么我希望结果表自动扩展一列以容纳这个额外的数据点。 问题答案: 您

  • 问题内容: 这是我当前的mysql表的样子: 现在,我想返回基于星期几进行分组的结果集,如下所示: 这是我当前的查询。但它只返回每天的第一打。 有人可以帮我弄这个吗?谢谢迈克 问题答案: SQLFiddle演示 输出值