आप Oracles संग्रह का उपयोग कर सकते हैं। CAST()
COLLECT()
. के साथ जोड़ा गया उपयोगकर्ता द्वारा परिभाषित संग्रह में मानों को एकत्रित कर सकते हैं और फिर SET()
डुप्लिकेट से छुटकारा मिलेगा। फिर आप LISTAGG()
. का उपयोग कर सकते हैं संग्रह को एक स्ट्रिंग में बदलने के लिए।
Oracle सेटअप :
CREATE TYPE intlist IS TABLE OF INT;
/
CREATE TYPE stringlist IS TABLE OF VARCHAR2(4000);
/
CREATE TABLE table_name ( ColA NUMBER(5,0), ColB VARCHAR2(20) );
INSERT INTO table_name
SELECT 1, 'POW' FROM DUAL UNION ALL
SELECT 2, 'POW' FROM DUAL UNION ALL
SELECT 1, 'POWPRO' FROM DUAL UNION ALL
SELECT 1, 'PRO' FROM DUAL UNION ALL
SELECT 2, 'PRO' FROM DUAL UNION ALL
SELECT 1, 'PROUTL' FROM DUAL UNION ALL
SELECT 1, 'TNEUTL' FROM DUAL UNION ALL
SELECT 1, 'UTL' FROM DUAL UNION ALL
SELECT 1, 'UTLTNE' FROM DUAL;
क्वेरी :
SELECT ( SELECT LISTAGG( COLUMN_VALUE, ',' )
WITHIN GROUP ( ORDER BY COLUMN_VALUE )
FROM TABLE( ColA ) ) AS ColA,
( SELECT LISTAGG( COLUMN_VALUE, ',' )
WITHIN GROUP ( ORDER BY COLUMN_VALUE )
FROM TABLE( ColB ) ) AS ColB
FROM (
SELECT SET( CAST( COLLECT( ColA ORDER BY ColA ) AS INTLIST ) ) ColA,
SET( CAST( COLLECT( ColB ORDER BY ColB ) AS STRINGLIST ) ) ColB
FROM table_name
);
आउटपुट :
ColA ColB
---- ---------------------------------------
1,2 POW,POWPRO,PRO,PROUTL,TNEUTL,UTL,UTLTNE