Oracle 11g cung cấp một PIVOT
hoạt động mà bạn muốn.
Giải pháp Oracle 11g
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Lưu ý:Tôi không có bản sao của 11g để kiểm tra tính năng này nên tôi chưa xác minh chức năng của nó)
Tôi nhận được giải pháp này từ:http://orafaq.com/wiki/PIVOT
CHỈNH SỬA - tùy chọn xoay xml (cũng là Oracle 11g)
Rõ ràng là cũng có một pivot xml
tùy chọn khi bạn không biết tất cả các tiêu đề cột có thể có mà bạn có thể cần. (xem LOẠI XML phần gần cuối trang có tại http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html)
select * from
(select id, k, v from _kv)
pivot xml (max(v)
for k in (any) )
(Lưu ý:Như trước đây, tôi không có bản sao của 11g để kiểm tra tính năng này nên tôi chưa xác minh chức năng của nó)
Chỉnh sửa2: Đã thay đổi v
trong pivot
và pivot xml
câu lệnh cho max(v)
vì nó được cho là được tổng hợp như đã đề cập trong một trong các nhận xét. Tôi cũng đã thêm in
mệnh đề không phải là tùy chọn cho pivot
. Tất nhiên, phải chỉ định các giá trị trong in
mệnh đề đánh bại mục tiêu có một truy vấn pivot / crosstab hoàn toàn động như mong muốn của người đăng câu hỏi này.