我知道这个问题已被问过几次,而我正在尝试完全接受所接受的答案,但显然我做错了什么并且无法获得所需的输出。
我想以下列格式返回数据:
姓名| 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
答案 0 :(得分:1)
您必须根据需要使用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