MySQL SELECT 将多个值显示为列

标签 mysql sql pivot

<分区>

Possible Duplicate:
SQL “transform” query

我不知道如何编写 SQL 语句来将表的不同值显示为单独的列...这是一个示例:

Table A - Project
= = = = = = = = = = = = = =
ID | Project
= = = = = = = = = = = = = =
1  | Google

Table B - Tasks
= = = = = = = = = = = = = = = = = = = = = = = = = = = =
ID  | Project ID    | Task_name | Date Complete
= = = = = = = = = =  = = = = = = = = = = = = = = = = = =
1   |  1            | Build     | 10/30/12
2   |  1            | Revise    | 11/15/12
3   |  1            | Launch    | 11/30/12

SQL 输出格式如下:

Website   | Build Date  | Revise Date   | Launch Date
= = = = = = = = = =  = = = = = = = = = = = = = = = = = =
Google    | 10/30/12    | 11/15/12      | 11/30/12  

最佳答案

这称为 PIVOT,但 MySQL 没有 PIVOT 函数,但您可以使用聚合函数和 CASE 复制它声明:

select p.project as website,
  max(case when t.task_name = 'build' then date_format(`Date Complete`, '%m/%d/%y') end) BuildDate,
  max(case when t.task_name = 'Revise' then date_format(`Date Complete`, '%m/%d/%y') end) ReviseDate,
  max(case when t.task_name = 'Launch' then date_format(`Date Complete`, '%m/%d/%y') end) LaunchDate
from project p
inner join tasks t
  on p.id = t.`Project ID`
group by p.project

参见 SQL Fiddle with Demo

结果:

| WEBSITE | BUILDDATE | REVISEDATE | LAUNCHDATE |
-------------------------------------------------
|  Google |  10/30/12 |   11/15/12 |   11/30/12 |

关于MySQL SELECT 将多个值显示为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653894/

相关文章:

mysql - 将行转置为 MySQL 中的列

php - 构建一个长查询并有很多 if 语句 - 有没有更优雅的方法?

mysql - 如果值不正确,则在 MySQL 函数中设置默认变量

mysql - 良好的数据库设计/规范化

php - SQL : Match IN operator with anything

sql - :SQL: select values from rows as columns

mysql - 两个字段表(均为 int)是否需要索引?

MySQL SELECT WHERE PERSON_NAME = 函数不工作

mysql - 请根据提到的行数告诉我哪个查询是有效的

mysql - 对数字范围 mysql 执行计算