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

इनर जॉइन टू टेबल, एग्रीगेटिंग वर्चर फील्ड

यदि आपको Oracle 11g मिला है, तो आप LISTAGG फ़ंक्शन का उपयोग कर सकते हैं, जैसे:

Insert into    NEW_TFIDF_TABLE
SELECT T.ID, T.TERMS ||', '|| LISTAGG(TT.TERMS, ',') 
FROM TFIDF_TABLE T
INNER JOIN TERMS_TABLE TT  ON  T.ID=TT.ID
GROUP BY t.ID, t.TERMS /* assuming the id is unique in t */

यदि आप पुराने संस्करण पर हैं, तो आप पैकेज का उपयोग करके अपने स्वयं के समग्र कार्य बना सकते हैं। मैंने यह FNC_CONCATCOMMASEPARATED फ़ंक्शन बनाया है, जिसका मैं अक्सर स्वयं उपयोग करता हूं।

CREATE OR REPLACE TYPE "AT_CONCATCOMMASEPARATED" as object
(
  V_CONCAT varchar2(32767), -- concatenated strings

  static function ODCIAggregateInitialize(
    P_CONTEXT in out AT_CONCATCOMMASEPARATED)
  return number,

  member function ODCIAggregateIterate(
    self  in out AT_CONCATCOMMASEPARATED,
    P_VALUE in     varchar2)
  return number,

  member function ODCIAggregateTerminate(
    self     in  AT_CONCATCOMMASEPARATED,
    P_RESULT out varchar2,
    P_FLAGS  in  number)
  return number,

  member function ODCIAggregateMerge(
    self      in out AT_CONCATCOMMASEPARATED,
    P_CONTEXT in     AT_CONCATCOMMASEPARATED)
  return number
);

create or replace type body AT_CONCATCOMMASEPARATED is

static function ODCIAggregateInitialize(
  P_CONTEXT in out AT_CONCATCOMMASEPARATED)
return number
is
begin
  if P_CONTEXT is null then
    P_CONTEXT := AT_CONCATCOMMASEPARATED('');
  else
    P_CONTEXT.V_CONCAT := null;
  end if;

  return ODCIConst.Success;
end;

member function ODCIAggregateIterate(
  self    in out AT_CONCATCOMMASEPARATED,
  P_VALUE in     varchar2)
return number
is
begin
  if self.V_CONCAT is null then
    self.V_CONCAT := P_VALUE;
  else
    self.V_CONCAT := self.V_CONCAT || ', ' || P_VALUE;
  end if;

  return ODCIConst.Success;
end;

member function ODCIAggregateTerminate(
  self     in  AT_CONCATCOMMASEPARATED,
  P_RESULT out varchar2,
  P_FLAGS  in  number)
return number
is
begin
  P_RESULT := substr(self.V_CONCAT, 0, 4000);

  return ODCIConst.Success;
end;

member function ODCIAggregateMerge(
  self      in out AT_CONCATCOMMASEPARATED,
  P_CONTEXT in     AT_CONCATCOMMASEPARATED)
return number
is
begin
  if P_CONTEXT.V_CONCAT is not null then
    if self.V_CONCAT is null then
      self.V_CONCAT := P_CONTEXT.V_CONCAT;
    else
      self.V_CONCAT := self.V_CONCAT || ', ' || P_CONTEXT.V_CONCAT;
    end if;
  end if;

  return ODCIConst.Success;
end;

end;

create or replace function FNC_CONCATCOMMASEPARATED (input varchar2) return varchar2
aggregate using AT_CONCATCOMMASEPARATED;

इंसर्ट स्टेटमेंट तब बन जाता है:

Insert into    NEW_TFIDF_TABLE
SELECT T.ID, T.TERMS ||', '|| FNC_CONCATCOMMASEPARATED(TT.TERMS) 
FROM TFIDF_TABLE T
INNER JOIN TERMS_TABLE TT  ON  T.ID=TT.ID
GROUP BY t.ID, t.TERMS /* assuming the id is unique in t */


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. फिक्स एरर "ORA-01790:एक्सप्रेशन में संबंधित एक्सप्रेशन के समान डेटाटाइप होना चाहिए"

  2. ऑरैकल पैकेज के अंदर निर्भरता कैसे खोजें?

  3. दो तालिकाओं के बीच एक से कई संबंधों के लिए Oracle चयन क्वेरी

  4. Oracle में रोमन अंकों के रूप में संख्याओं को कैसे प्रारूपित करें

  5. sqlplus में स्पूल का उपयोग करके हेडर बनाने में परेशानी