2016-11-11 126 views
0

我需要显示存储在MySQL数据库表中的数据的汇总MySQL查询显示行数据为列

control_point_run

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 

Requirement image 请帮我用MySQL查询来获得预期的结果。我不知道如何将行数据转换为列标题[A,B,C]。

请注意,需要的列名(A,B,C)需要根据可用数据自动生成。该表中包含的数据比此示例中的数据更多,并且未来还可以插入更多的control_point值。

+0

你试过谷歌? – Prasad

回答

2

使用枢轴查询:

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 
+0

感谢您的快速响应。情况比样本数据有点复杂。我需要根据可用数据自动生成“A,B,C”等列。因为这些数据也可以更改, –

+0

然后,您可能需要在这种情况下使用动态SQL。你有没有试过Google? –

+0

它试图谷歌,但不是“动态SQL”我没有这个想法。并没有想法创建简单的搜索术语来解释这个要求。也会尝试使用术语“动态SQL”。 –

0

这可能是正确的。 请检查这个:

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; 
+0

与此,结果不显示“持续时间”。 –

+0

哦....现在检查它请 – Anands23

+0

感谢您的建议,但其结果包含重复的数据,显示应为null的位置错误的持续时间值。并且,我的要求“列名(A,B,C)需要基于可用数据自动生成”并不像您的建议那样可用,我必须为所有列编写子选择语句。意味着如果表中有一个新的control_point,它将不会在此查询的结果中,直到我为其添加子查询。 –