我在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
虽然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
这称为透视表。 制作起来有点尴尬:
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演示 输出值