Bạn có thể sử dụng các hàm cửa sổ và tổng hợp có điều kiện:
select
rn,
max(case when occupation = 'Doctor' then name end) doctor,
max(case when occupation = 'Singer' then name end) singer,
max(case when occupation = 'Actor' then name end) actor
from (
select t.*, row_number() over(partition by occupation order by name) rn
from mytable t
)
group by rn
Truy vấn con xếp hạng những người có cùng nghề nghiệp theo tên. Sau đó, bạn có thể sử dụng thông tin đó để tạo các hàng và truy cập vào tên tương ứng cho từng nghề nghiệp với tổng hợp có điều kiện.
Không có chức năng cửa sổ, nó là khác nhau. Nếu dữ liệu của bạn không quá lớn, một tùy chọn sẽ mô phỏng số hàng bằng một truy vấn con:
select
rn,
max(case when occupation = 'Doctor' then name end) doctor,
max(case when occupation = 'Singer' then name end) singer,
max(case when occupation = 'Actor' then name end) actor
from (
select t.*,
(
select count(*)
from mytable t1
where t1.occupation = t.occupation and t1.name <= t.name
) rn
from mytable t
)
group by rn