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

एक ग्राहक की एक तालिका से दो अलग-अलग मानों को एक पंक्ति में कैसे संयोजित करें

आपको GROUP BY id की आवश्यकता है , और "एक से अधिक ऑर्डर" की शर्त एक HAVING . में जाती है खंड (क्योंकि यह प्रत्येक समूह पर एक बाधा है, इनपुट डेटा में प्रत्येक व्यक्तिगत पंक्ति पर नहीं)। एकत्रीकरण LISTAGG . के साथ किया जाता है ।

with
     test_data ( id, product, code ) as (
       select 1, 'Apple' , 145 from dual union all
       select 1, 'Grapes', 146 from dual union all
       select 2, 'Orange', 147 from dual union all
       select 2, 'Apple' , 145 from dual union all
       select 2, 'Plum'  , 148 from dual union all
       select 3, 'Grapes', 146 from dual union all
       select 3, 'Orange', 147 from dual union all
       select 4, 'Grapes', 146 from dual union all
       select 5, 'Orange', 147 from dual
     )
--  End of test data (not part of the solution). Query begins below this line.
select   id, listagg(code, ' | ') within group (order by id) as codes
from     test_data
group by id
having   count(*) > 1
;

ID  CODE
--  ---------------
 1  145 | 146
 2  145 | 147 | 148
 3  146 | 147

हालांकि, Oracle 10 में आपके पास LISTAGG() . नहीं है . Oracle 11.2 से पहले, समान परिणाम प्राप्त करने का एक सामान्य तरीका पदानुक्रमित प्रश्नों का उपयोग करना था, कुछ इस तरह:

select id, ltrim(sys_connect_by_path(code, ' | '), ' | ') as codes
from   (
         select id, code,
                row_number() over (partition by id order by code) as rn
         from   test_data
       )
where connect_by_isleaf = 1 and level > 1
connect by rn = prior rn + 1
       and prior id = id
       and prior sys_guid() is not null
start with rn = 1
;

संपादित :

यदि एक ही आईडी के लिए दोहराए गए कोड को पहले "विशिष्ट" करने की आवश्यकता है, तो - दूसरे समाधान का उपयोग करके - निम्न परिवर्तनों की आवश्यकता है, दोनों अंतरतम उपश्रेणी में:

  • बदलें SELECT ID, CODE, ... करने के लिए SELECT DISTINCT ID, CODE, ...

  • बदलें ROW_NUMBER() करने के लिए DENSE_RANK()




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी तालिका में अनुमत स्तंभों की अधिकतम संख्या क्या है?

  2. Oracle SQL डेवलपर:परीक्षण विफल:नेटवर्क एडेप्टर कनेक्शन स्थापित नहीं कर सका?

  3. ORA-29481:JDBC से Oracle 12c प्रक्रिया को कॉल करते समय निहित परिणाम क्लाइंट को वापस नहीं किए जा सकते हैं

  4. कैसे Oracle में एक स्कीमा से तालिका की सूची ड्रॉप करने के लिए?

  5. ORA-00119:अमान्य विनिर्देश ORA-00132:सिंटैक्स त्रुटि