Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एसक्यूएल में अल्पविराम से अलग आईडी से नाम प्राप्त करें

ऐसा करने के लिए पूर्णांकों वाली तालिका में शामिल हों, ताकि प्रत्येक कर्मचारी पंक्ति उतनी ही बार हो जितनी बार उसके स्ट्रिंग में विभाग आईडी हों लेकिन कम से कम एक बार। सम्मिलित परिणाम में पंक्तियों के लिए संख्याएँ i 1 से n . पर जाएं , जहां n उस कर्मचारी के लिए स्ट्रिंग में आईडी की संख्या है (यदि कर्मचारी के लिए कोई विभाग आईडी है)। फिर आप REGEXP_SUBSTR() . का उपयोग कर सकते हैं स्ट्रिंग से _i_th नंबर प्राप्त करने के लिए। विभाग का नाम प्राप्त करने के लिए, विभागों में शामिल होने के लिए इसका उपयोग करें। फिर LISTAGG() . का उपयोग करके एकत्रीकरण का उपयोग करें प्रत्येक कर्मचारी के लिए फिर से एक पंक्ति प्राप्त करने के लिए।

SELECT E.EMPID,
       E.NAME,
       E.DEPTID,
       LISTAGG(D.DEPTNAME, ',') WITHIN GROUP (ORDER BY I.I) DEPTNAME
       FROM EMPLOYEE E
            LEFT JOIN (SELECT ROW_NUMBER() OVER (ORDER BY DEPTID) I
                              FROM DEPARTMENT) I
                      ON I.I <= REGEXP_COUNT(E.DEPTID, ',') + 1
            LEFT JOIN DEPARTMENT D
                      ON D.DEPTID = TO_NUMBER(REPLACE(REGEXP_SUBSTR(',' || E.DEPTID, ',([[:digit:]]+)', 1, I.I), ',', ''))
       GROUP BY E.EMPID,
                E.NAME,
                E.DEPTID;

db<>fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विजुअल स्टूडियो 2010 से Oracle के साथ काम करने के लिए क्या आवश्यक है?

  2. Oracle प्रदर्शन और ट्यूनिंग प्रश्नोत्तरी

  3. Visual Studio 2012 RC में .NET के लिए Oracle डेटा प्रदाता नहीं देख सकता

  4. 2 कार्य जो Oracle में एक तिथि से महीना लौटाते हैं

  5. Oracle 11g . में वास्तविक निष्पादन योजना प्राप्त करना