Oracle 11g एक PIVOT
प्रदान करता है ऑपरेशन जो वही करता है जो आप चाहते हैं।
Oracle 11g समाधान
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(नोट:मेरे पास इसका परीक्षण करने के लिए 11g की एक प्रति नहीं है इसलिए मैंने इसकी कार्यक्षमता को सत्यापित नहीं किया है)
मैंने यह समाधान यहां से प्राप्त किया:http://orafaq.com/wiki/PIVOT
संपादित करें -- पिवट xml विकल्प (Oracle 11g भी)
जाहिरा तौर पर एक pivot xml
भी है जब आप उन सभी संभावित कॉलम शीर्षकों को नहीं जानते हैं जिनकी आपको आवश्यकता हो सकती है। (XML प्रकार देखें) 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) )
(नोट:पहले की तरह मेरे पास इसका परीक्षण करने के लिए 11g की एक प्रति नहीं है इसलिए मैंने इसकी कार्यक्षमता को सत्यापित नहीं किया है)
संपादित करें2: परिवर्तित v
pivot
. में और pivot xml
max(v)
. के लिए कथन चूंकि इसे टिप्पणियों में से एक में उल्लिखित के रूप में एकत्रित किया जाना चाहिए। मैंने in
भी जोड़ा है क्लॉज जो pivot
. के लिए वैकल्पिक नहीं है . बेशक, in
. में मान निर्दिष्ट करना होगा खंड पूरी तरह से गतिशील पिवट/क्रॉसस्टैब क्वेरी रखने के लक्ष्य को हरा देता है जैसा कि इस प्रश्न के पोस्टर की इच्छा थी।