【问题标题】:Convert rows into columns in MySQL在 MySQL 中将行转换为列
【发布时间】: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 子句?您可能会发现您正在阻止查询在每个时隙返回一个以上的类。没有看到其他表格和数据,有点难以提供帮助。

标签: mysql database join


【解决方案1】:

我认为你应该改变整个想法。试试这样的:

     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,
wd.name as weekDayName,
CONCAT(sb.name," - ",bt.name) as name

现在您可以将每一天作为“weekDayName”访问,并将“name”作为 concat。我认为这更容易,因为您没有实际上不需要的列,而且这不会检查每一行的“if”。

【讨论】:

  • 感谢您的回复,但我没有显示 weekDayName,而是在给定位置显示与教师相关的任何内容,我正在为教师创建时间表,我将工作日作为列,因为它是固定的,其余的东西正在改变,所以请你帮我写一个时间表查询,相关表在结构表中作为外键提到,谢谢
猜你喜欢
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多