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

ओरेकल:सीमांकक के साथ कॉनकैट, लेकिन केवल तभी जब दोनों ऑपरेंड न्यूल नहीं हैं

मुझे पता है कि आप 10g का उपयोग कर रहे हैं, इसलिए यह काम नहीं करेगा। लेकिन पूर्णता के लिए, LISTAGG() हैंडल करता है NULL मान "सही ढंग से"। उसके लिए आपको 11g2 पर अपडेट करना होगा, हालांकि:

-- Some sample data, roughly equivalent to yours
with t as (
  select 'foo' as x from dual union all
  select null       from dual union all
  select 'bar'      from dual
)
-- Use the listagg aggregate function to join all values
select listagg(x, ';') within group (order by rownum)
from t;

या थोड़ा और संक्षिप्त, यदि आप किसी तालिका से कॉलम सूचीबद्ध करना चाहते हैं:

-- I use SYS.ORA_MINING_VARCHAR2_NT as a TABLE TYPE. Use your own, if you prefer
select listagg(column_value, ';') within group (order by rownum)
from table(ORA_MINING_VARCHAR2_NT('foo', null, 'bar'));

या किसी वास्तविक तालिका के विरुद्ध:

select listagg(column_value, ';') 
       within group (order by rownum)
from Table1
cross join table(ORA_MINING_VARCHAR2_NT(Table1.a, Table1.b, Table1.c))
group by Table1.id;

अब मुझे यकीन नहीं है कि यह आपके मूल उदाहरण से इतना बेहतर (अधिक पठनीय) है :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL दिनांकों में पारित 2 के बीच कार्य दिवसों की संख्या वापस करने के लिए

  2. परिणामसेट का Oracle JDBC प्रदर्शन

  3. जावा से Oracle संग्रहीत कार्यविधि में REFCURSOR प्रकार चर भेजें

  4. Oracle में रोमन अंकों में महीने को कैसे प्रारूपित करें

  5. अपवाद को कैसे संभालें और शेष कथनों को कैसे निष्पादित करें?