Mysql 行到列

标签 mysql rows

我有以下 mysql 表:

+----+-----+-----+--------+
| id | sid | tid |  val   |
+----+-----+-----+--------+
|  1 |   1 |   1 | square |
|  2 |   1 |   2 | big    |
|  3 |   1 |   3 | red    |
|  4 |   2 |   1 | circle |
|  5 |   2 |   2 | small  |
|  6 |   2 |   3 | yellow |
+----+-----+-----+--------+

我需要一个查询才能获得以下结果:

+-----+--------+-------+--------+
| sid | figure | size  | colour |
+-----+--------+-------+--------+
|   1 | square | big   | red    |
|   2 | circle | small | yellow |
+-----+--------+-------+--------+

有什么想法吗?

谢谢。

最佳答案

您没有提供有关如何确定新列名称的任何详细信息,但根据您的数据,我猜测它是基于 tid 列中的值。您可以使用带有 case 表达式的聚合函数来获取结果:

select 
  sid,
  max(case when tid = 1 then val end) figure,
  max(case when tid = 2 then val end) size,
  max(case when tid = 3 then val end) color
from yourtable
group by sid;

参见SQL Fiddle with Demo

关于Mysql 行到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19007699/

相关文章:

jquery - 使用 CSS 和 jQuery 将高度更改为奇数行

mysql - 尝试为外键赋值时出错

php - mysql返回多级数组

MySQL 更新左连接错误#1064

mysql - 将互斥列的多个最大值提取到一行中

mysql - SQL 查询过滤器,如果

PHP - 表 ID 相同

css - 如何将整行向右移动?

sql - 使用 PK 将行插入 SQL Server 表中特定位置

Php-mysql-返回行数