Đây là một mô hình- PIVOT
áp dụng rownum
gửi đến các giáo viên:
select s.col_entry,
max(case when s.col_inquiry_name = 'Title' then s.col_value end) AS 'Title',
max(case when s.col_inquiry_name = 'Course' then s.col_value end) AS 'Course',
max(case when b.col_inquiry_name = 'Description' then b.col_value end) AS 'Description',
max(case when d.col_inquiry_name = 'Semester' then d.col_value end) AS 'Semester',
max(case when s.col_inquiry_name = 'Location' then s.col_value end) AS 'Location',
max(case when tch.grp = 'Teachers_01' then tch.col_value end) AS 'Teachers_01',
max(case when tch.grp = 'Teachers_02' then tch.col_value end) AS 'Teachers_02',
max(case when tch.grp = 'Teachers_03' then tch.col_value end) AS 'Teachers_03',
max(case when tch.grp = 'Teachers_04' then tch.col_value end) AS 'Teachers_04',
max(case when tch.grp = 'Teachers_05' then tch.col_value end) AS 'Teachers_05'
from smallText s
left join bigText b
on s.col_entry = b.col_entry
left join date d
on b.col_entry = d.col_entry
left join
(
select col_entry, col_value, concat('Teachers_0', group_row_number) grp
from
(
select col_entry, col_value,
@num := if(@col_entry = `col_entry`, @num + 1, 1) as group_row_number,
@col_entry := `col_entry` as dummy
from smallText , (SELECT @rn:=0) r
where col_inquiry_name = 'Teachers'
and col_value != ''
) x
) tch
on s.col_entry = tch.col_entry
group by s.col_entry;
xem SQL Fiddle với bản trình diễn
Chỉnh sửa số 1, dựa trên trường bổ sung mà bạn đã cung cấp col_order
bạn có thể sử dụng nó để xác định giáo viên mà không cần sử dụng rownum
biến:
select s.col_entry,
max(case when s.col_inquiry_name = 'Title' then s.col_value end) AS 'Title',
max(case when s.col_inquiry_name = 'Course' then s.col_value end) AS 'Course',
max(case when b.col_inquiry_name = 'Description' then b.col_value end) AS 'Description',
max(case when d.col_inquiry_name = 'Semester' then d.col_value end) AS 'Semester',
max(case when s.col_inquiry_name = 'Location' then s.col_value end) AS 'Location',
max(case when s.col_inquiry_name = 'Teachers'
and s.col_order = 1 then s.col_value end) AS 'Teachers_01',
max(case when s.col_inquiry_name = 'Teachers'
and s.col_order = 2 then s.col_value end) AS 'Teachers_02',
max(case when s.col_inquiry_name = 'Teachers'
and s.col_order = 3 then s.col_value end) AS 'Teachers_03',
max(case when s.col_inquiry_name = 'Teachers'
and s.col_order = 4 then s.col_value end) AS 'Teachers_04',
max(case when s.col_inquiry_name = 'Teachers'
and s.col_order = 5 then s.col_value end) AS 'Teachers_05'
from smallText s
left join bigText b
on s.col_entry = b.col_entry
left join date d
on b.col_entry = d.col_entry
group by s.col_entry