mysql - 如何将连接查询的两行输出合并为一行?

标签 mysql sql time-and-attendance

我有两个表 Slot 和 Timetable
插槽:

slotID|startTime|endTime
------------------------
1     |10:00:00|12:00:00
2     |13:00:00|15:00:00

时间表:

ScheduleID|slotID|subjectID|day
-------------------------------
1         |1     |subject1 |mon
2         |2     |subject1 |mon
3         |1     |subject2 |tue
4         |2     |subject2 |tue

我试过了

    SELECT slot.startTime, slot.endTime,
    (CASE WHEN day="mon" THEN timetable.subjectID END) as Monday,
    (CASE WHEN day="tue" THEN timetable.subjectID END) as Tuesday
    FROM timetable
    INNER JOIN slot ON timetable.slotID=slot.slotID

我得到了:

startTime|endTime|Monday  |Tuesday
---------------------------------------
10:00:00|12:00:00|subject1|NULL
10:00:00|12:00:00|NULL    |subject2
13:00:00|15:00:00|subject1|NULL
13:00:00|15:00:00|NULL    |subject2

我想编写一个 SQL 查询来输出 8 列以打印如下所示的内容

startTime |endTime |   mon  |   tue  |   wed  |   thu  |   fri  |   sat  
-------------------------------------------------------------------------
 10:00:00 |12:00:00|subject1|subject2|subject1|subject2|subject1|subject2
 13:00:00 |15:00:00|subject1|subject2|subject1|subject2|subject1|subject2

我想删除 NULL 值并合并具有相同 startTime 和 endTime 的行。任何帮助将不胜感激

最佳答案

您想要聚合:

SELECT s.startTime, s.endTime,
       MAX(CASE WHEN day = 'mon' THEN tt.subjectID END) as Monday,
       MAX(CASE WHEN day = 'tue' THEN tt.subjectID END) as Tuesday
FROM timetable tt INNER JOIN
     slot s
     ON tt.slotID = s.slotID
GROUP BY s.startTime, s.endTime;

关于mysql - 如何将连接查询的两行输出合并为一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57922554/

相关文章:

MySQL多个GTID执行GTID设置

跨多个数据库的 SQLite View 。这个可以吗?有没有更好的办法?

php - Where 子句在 tinyint 上不起作用

java - 时间和出勤

time-and-attendance - ZKemkeeper 在重新读取 ReadGeneralLogData 时花费很长时间

mysql - 查询返回一条 "extra"记录。关于如何从查询结果中删除它的任何建议?

php - CodeIgniter:获取当前时间在 tbl_from_time 和 tbl_to_time 之间的数据

mysql - 在MYSQL中创建组织数据库

SQL链接服务器查询非常非常慢