शुद्ध एसक्यूएल . में , इसके लिए बहुत अधिक कोडिंग की आवश्यकता होगी क्योंकि आपको श्रेणी . को मैन्युअल रूप से डालना होगा क्योंकि मानों और परास के बीच कोई संबंध ही नहीं है। यदि कोई संबंध होता, तो आप CASE . का उपयोग कर सकते थे अभिव्यक्ति और श्रेणी का निर्माण गतिशील रूप से ।
SQL> WITH DATA AS
2 (SELECT 50 "1-99transval",
3 90 "100-200transval",
4 80 "200-300transval",
5 67 "1-99nontransval",
6 58 "100-200nontransval",
7 88 "200-300nontransval"
8 FROM dual
9 )
10 SELECT '1-99' range,
11 "1-99transval" transval,
12 "1-99nontransval" nontransval
13 FROM DATA
14 UNION
15 SELECT '100-200' range,
16 "100-200transval",
17 "100-200nontransval" nontransval
18 FROM DATA
19 UNION
20 SELECT '200-300' range,
21 "200-300transval",
22 "200-300nontransval" nontransval
23 FROM DATA;
RANGE TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99 50 67
100-200 90 58
200-300 80 88
Oracle डेटाबेस 11g रिलीज़ 1 . से और ऊपर, आप UNPIVOT . का उपयोग कर सकते हैं
SQL> WITH DATA AS
2 (SELECT 50 "1-99transval",
3 90 "100-200transval",
4 80 "200-300transval",
5 67 "1-99nontransval",
6 58 "100-200nontransval",
7 88 "200-300nontransval"
8 FROM dual
9 )
10 SELECT *
11 FROM DATA
12 UNPIVOT( (transval,nontransval)
13 FOR RANGE IN ( ("1-99transval","1-99nontransval") AS '1-99'
14 ,("100-200transval","100-200nontransval") AS '100-200'
15 ,("200-300transval","200-300nontransval") AS '200-300'));
RANGE TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99 50 67
100-200 90 58
200-300 80 88
ऊपर, आपके मामले में आपको साथ . को बदलने की आवश्यकता है अपनी मौजूदा क्वेरी के साथ एक उप-क्वेरी . के रूप में क्लॉज करें . आपको UNION . में अन्य कॉलम शामिल करने होंगे ।
PL/SQL में , आप (ab) तत्काल निष्पादित . का उपयोग कर सकते हैं और कॉलम नाम . निकाल कर "श्रेणी" प्राप्त करें डायनामिक sql . में ।
हालांकि, अपनी मौजूदा क्वेरी को संशोधित/पुनः लिखना बेहतर होगा जिसे आपने अभी तक नहीं दिखाया है।