行を列に変換したい(曜日の名前)が、行ごとに1つのエントリしかなく、残りの列は空です(先生とタイムスロット用)。MySQLの列に行を変換する
表構造:
フォロークエリの出力:
と私のクエリは次のとおりです。
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
私は「列を列に変換する」のがとても好きです。あなたが望むものではありません。これは、リレーショナルデータベースの原則と矛盾します。 –
返信ありがとう、混乱のために申し訳ありませんが、私は問題が画像とクエリから明らかだと思います! – sefburhan
私は完全に詳述する時間がありませんでしたが、あなたはクラスのタイミングから質問を始め、08:00、09:00などで始まるすべてのクラスを取り出す必要があると思います。クラスの詳細を得ることができます。 –