कॉलम में मानों के जोड़े की परिभाषित संख्या के लिए tname, ttype
आप नीचे दी गई क्वेरी का उपयोग कर सकते हैं (ध्यान दें कि मैंने उदाहरण से आपके कॉलम नाम बदल दिए हैं, क्योंकि आपने वहां Oracle कीवर्ड का उपयोग किया था, मैंने टेबल को tasks
के रूप में भी नामित किया था। , इसलिए आपको इस डेटा को कोड में हर जगह अपने वास्तविक कॉलम नाम और तालिका नाम में बदलना होगा):
select * from tasks
pivot (max(tdate) for (tname, ttype) in
(('DG1','CF') DG1_CF, ('M0','A') M0_A, ('M0','POR') M0_POR,
('M1','A' ) M1_A, ('M1','CF') M1_CF, ('M2','A') M2_A)));
संभावनाओं की गतिशील संख्या के लिए आपको इस क्वेरी को "बनाने" की कुछ प्रक्रिया की आवश्यकता होगी। यहाँ मैंने view
. का प्रयोग किया है इसके लिए। प्रक्रिया कोड की प्रतिलिपि बनाएँ और इसे संकलित करें। जब आपकी तालिका में डेटा बदलता है तो आपको पहले प्रक्रिया चलानी होती है, फिर बस प्रक्रिया द्वारा बनाए गए दृश्य से चयन करें। ठीक से चलाने के लिए आपके स्कीमा को दिए गए दृश्य बनाने के लिए विशेषाधिकार की आवश्यकता होती है।
execute create_tasks_view;
select * from v_tasks;
anonymous block completed
ID DG1_CF M0_A M0_POR M1_A M1_CF M2_A
----- ---------- ---------- ---------- ---------- ---------- ----------
45000 2015-03-02 2015-02-01 2015-03-11 2015-02-03 2015-03-01 2015-02-04
44400 2015-02-02 2015-01-01 2015-02-11 2015-01-03 2015-02-01 2015-01-04
बेशक आप order by
. जोड़कर या संशोधित करके अपनी इच्छानुसार पंक्तियों और स्तंभों के क्रम को बदल सकते हैं प्रक्रिया कोड में भाग:
create or replace procedure create_tasks_view as
v_sql varchar2(32767) := '';
begin
for v in (select distinct tname, ttype from tasks order by tname, ttype)
loop
v_sql := v_sql || '(''' || v.tname || ''',''' || v.ttype || ''') '
||v.tname||'_'||v.ttype||',';
end loop;
v_sql := 'create or replace view v_tasks as '
||'select * from tasks pivot (max(tdate) for (tname, ttype) in ('
||rtrim(v_sql, ', ')||'))';
execute immediate v_sql;
end create_tasks_view;
मेरा मानना है कि लिंक में आपके प्रश्न के लिए और भी सार्वभौमिक समाधान है जो मैंने आपको टिप्पणियों में दिया है:डायनामिक एसक्यूएल पिवोटिंग... . यह बहुत आशाजनक लग रहा है, बस ध्यान से अनुभाग संसाधन पढ़ें नीचे, और निर्देश के चरणों का पालन करें। मैंने व्यक्तिगत रूप से इस पद्धति की जाँच नहीं की, लेकिन शायद यह मेरे "प्रक्रिया-दृश्य" समाधान से अधिक आपके लिए उपयुक्त होगा।