MySQL中的数据透视表未正确返回

时间:2015-06-29 10:55:03

标签: php mysql pivot-table

我知道这个问题已被问过几次,而我正在尝试完全接受所接受的答案,但显然我做错了什么并且无法获得所需的输出。

我想以下列格式返回数据:

姓名| 27-06-2015 | 28-06-2015

===== | ========== | ==========

约翰|早上6:30 |上午7:30

史蒂夫|早上6点|凌晨4点

++++++++++++++++++++++++++++++++++++++

但是当我运行Fiddle查询时,我没有在出勤表中获得第二天的任何数据。如果我删除分组,我会得到第二天的数据,但在结果集中插入了一个新行:

姓名| 27-06-2015 | 28-06-2015

===== | ========== | ==========

约翰|早上6:30 |空

约翰| null |上午7:30

史蒂夫|早上6点|空

史蒂夫| null |凌晨4点

++++++++++++++++++++++++++++++++++

我使用的sql是:

SELECT 
 Name,
 case(dropoffdate) when '20150627' then CONCAT(DropoffTime, ' - ', PickupTime) end as '2015-06-27',
 case (DropoffDate) when '20150628' then CONCAT(DropoffTime, ' - ', PickupTime) end as '2015-06-28'
 FROM
 Student s
 LEFT OUTER JOIN Attendance a on s.id = a.student 
 GROUP BY s.id

以下是fiddle link

1 个答案:

答案 0 :(得分:1)

您必须根据需要使用MAXMIN组功能来获取有效记录。

SELECT 
       Name,
       MAX( case(dropoffdate) 
                 when '20150627' 
                      then CONCAT(DropoffTime, ' - ', PickupTime) 
            end ) as '2015-06-27',
       MAX( case (DropoffDate) 
                 when '20150628' 
                      then CONCAT(DropoffTime, ' - ', PickupTime) 
            end ) as '2015-06-28'
 FROM Student s
 LEFT OUTER JOIN Attendance a on s.id = a.student 
 GROUP BY s.id