将行数据显示为列的Mysql查询

将行数据显示为列的Mysql查询,mysql,Mysql,我需要显示MySQL数据库表中存储的数据摘要 控制点运行 run_date control_point duration 10/10/2016 A 100 10/10/2016 B 200 10/10/2016 C 150 10/11/2016 A 160 10/11/2016 B 220 10/11/2016 C 180 10/12/2016 A 200 10/12/2016 B 120 10/12/2016 C 180 预期产

我需要显示MySQL数据库表中存储的数据摘要

控制点运行

run_date    control_point   duration
10/10/2016  A   100
10/10/2016  B   200
10/10/2016  C   150
10/11/2016  A   160
10/11/2016  B   220
10/11/2016  C   180
10/12/2016  A   200
10/12/2016  B   120
10/12/2016  C   180
预期产量

run_date    A   B   C
10/10/2016  100 200 150
10/11/2016  160 220 180
10/12/2016  200 120 180
请帮助我使用MySQL查询以获得预期结果。我不知道如何将中的行数据转换为列标题[A、B、C]

请注意,预期的列名(A、B、C)需要根据可用数据自动生成。该表包含的数据比此示例中的数据多,将来也可以插入更多的控制点值。

使用透视查询:

SELECT run_date,
       MAX(CASE WHEN control_point = 'A' THEN duration END) AS A,
       MAX(CASE WHEN control_point = 'B' THEN duration END) AS B,
       MAX(CASE WHEN control_point = 'C' THEN duration END) AS C
FROM yourTable
GROUP BY run_date
使用透视查询:

SELECT run_date,
       MAX(CASE WHEN control_point = 'A' THEN duration END) AS A,
       MAX(CASE WHEN control_point = 'B' THEN duration END) AS B,
       MAX(CASE WHEN control_point = 'C' THEN duration END) AS C
FROM yourTable
GROUP BY run_date
这也许是对的。 请同时检查:

 SELECT run_date,
   (SELECT duration from tablename where control_point = 'A') as 'A',
   (SELECT duration from tablename where control_point = 'B') as 'B',
   (SELECT duration from tablename where control_point = 'C') as 'C' 
 FROM tablename
 GROUP BY run_date;
这也许是对的。 请同时检查:

 SELECT run_date,
   (SELECT duration from tablename where control_point = 'A') as 'A',
   (SELECT duration from tablename where control_point = 'B') as 'B',
   (SELECT duration from tablename where control_point = 'C') as 'C' 
 FROM tablename
 GROUP BY run_date;

你试过谷歌吗?你试过谷歌吗?谢谢你的快速回复。情况比样本数据要复杂一些。我需要像“A,B,C”这样的列根据可用数据自动生成。因为这些数据也可以更改,所以在这种情况下可能需要使用动态SQL。你试过谷歌搜索吗?它试过谷歌,但不是“动态SQL”,我没有这个想法。不知道如何创建简单的搜索词来解释这个要求。我也会尝试使用“动态SQL”这个术语。用真实的问题更新你的问题,也许你会得到一个准确的答案。很明显,你问的(我回答的)不是这个。谢谢你的快速回复。情况比样本数据要复杂一些。我需要像“A,B,C”这样的列根据可用数据自动生成。因为这些数据也可以更改,所以在这种情况下可能需要使用动态SQL。你试过谷歌搜索吗?它试过谷歌,但不是“动态SQL”,我没有这个想法。不知道如何创建简单的搜索词来解释这个要求。我也会尝试使用“动态SQL”这个术语。用真实的问题更新你的问题,也许你会得到一个准确的答案。很明显,你问的(以及我回答的)不是这个。这样,结果就不会显示“持续时间”。谢谢你的建议,但是这个结果包含重复数据,为应该为空的职位显示了错误的持续时间值。而且,我的要求“需要根据可用数据自动生成列名(A、B、C)”,与您的建议不同,我必须为所有列编写子选择语句。意味着如果表中有一个新的控制点,在我为该控制点添加子查询之前,该控制点不会出现在该查询的结果中。这样,结果不会显示“持续时间”。感谢您的建议,但该结果包含重复数据,为应为空的位置显示错误的持续时间值。而且,我的要求“需要根据可用数据自动生成列名(A、B、C)”,与您的建议不同,我必须为所有列编写子选择语句。意味着如果表中有一个新的控制点,它将不会出现在这个查询的结果中,直到我为它添加子查询。