【发布时间】:2016-09-01 15:35:23
【问题描述】:
我想将行转换为列(工作日名称),但我每行只有一个条目,其余列为空(用于教师和时间段)。
表结构:
跟随查询的输出:
我的查询是:
SELECT
/* Employee section */
CONCAT(emp.first_name, " ",emp.middle_name,"", emp.last_name) as employeeFullName,
/* Timetable Entry section */
CONCAT(ct.start_time," - ",ct.end_time) as Slots,
if(wd.name='Monday',CONCAT(sb.name," - ",bt.name),null) Monday,
if(wd.name='Tuesday',CONCAT(sb.name," - ",bt.name),null) Tuesday,
if(wd.name='Wednesday',CONCAT(sb.name," - ",bt.name),null) Wednesday,
if(wd.name='Thurseday',CONCAT(sb.name," - ",bt.name),null) Thurseday,
if(wd.name='Friday',CONCAT(sb.name," - ",bt.name),null) Friday,
if(wd.name='Saturday',CONCAT(sb.name," - ",bt.name),null) Saturday,
if(wd.name='Sunday',CONCAT(sb.name," - ",bt.name),null) Sunday
FROM `timetable_entries` te
left Join `weekdays` wd ON te.weekday_id=wd.id
left Join `employees` emp ON te.employee_id=emp.id
left Join `class_timings` ct ON te.class_timing_id=ct.id
left Join `batches` bt ON te.batch_id=bt.id
left Join `subject` sb ON te.subject_id=sb.id
WHERE te.employee_id is not null
Group By te.class_timing_id,te.employee_id
【问题讨论】:
-
我很确定“将行转换为列”不是您想要的。这与关系数据库的原则相矛盾。
-
感谢您的回复,很抱歉造成混乱,但我认为从图片和查询中可以清楚地看到问题!
-
我没有时间详细说明,但我认为您需要从上课时间开始查询,并从 08:00、09:00 等开始抽出每节课。从那里你可以获取班级、工作日、员工等详细信息。
-
@d3v_1 谢谢,你提出了一个有价值的观点,但同时其他老师可能在同一天上课(科目),所以一个老师只有一个时间段
-
您是否尝试过使用 GROUP BY 子句?您可能会发现您正在阻止查询在每个时隙返回一个以上的类。没有看到其他表格和数据,有点难以提供帮助。