MySQL 中的枢轴 Table 未正确返回
Pivot Table in MySQL not returning correctly
我知道这个问题已经被问过几次了,我正在尝试完全按照接受的答案去做,但显然我做错了什么,无法得到想要的输出。
我想要return以下格式的数据:
姓名 | 27-06-2015 | 28-06-2015
===== | ========== | ==========
约翰 | 6:30AM | 7:30上午
史蒂夫 | 6:00上午 | 4:00上午
++++++++++++++++++++++++++++++++++++++
但是当我 运行 Fiddle 查询时,我没有得到任何第二天的出勤数据 table。如果我删除分组,我会得到第二天的数据,但会在结果集中插入一个新行:
姓名 | 27-06-2015 | 28-06-2015
===== | ========== | ==========
约翰 | 6:30AM |空
约翰 |空 | 7:30上午
史蒂夫 | 6:00上午 |空
史蒂夫 |空 | 4:00上午
++++++++++++++++++++++++++++++++++
我用的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
您必须根据需要使用 MAX
或 MIN
组函数,以获取有效记录。
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
我知道这个问题已经被问过几次了,我正在尝试完全按照接受的答案去做,但显然我做错了什么,无法得到想要的输出。
我想要return以下格式的数据:
姓名 | 27-06-2015 | 28-06-2015
===== | ========== | ==========
约翰 | 6:30AM | 7:30上午
史蒂夫 | 6:00上午 | 4:00上午
++++++++++++++++++++++++++++++++++++++
但是当我 运行 Fiddle 查询时,我没有得到任何第二天的出勤数据 table。如果我删除分组,我会得到第二天的数据,但会在结果集中插入一个新行:
姓名 | 27-06-2015 | 28-06-2015
===== | ========== | ==========
约翰 | 6:30AM |空
约翰 |空 | 7:30上午
史蒂夫 | 6:00上午 |空
史蒂夫 |空 | 4:00上午
++++++++++++++++++++++++++++++++++
我用的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
您必须根据需要使用 MAX
或 MIN
组函数,以获取有效记录。
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