2013-03-08 6 views
8

का उपयोग कर वर्णों के बीच अतिरिक्त रिक्त स्थान मैं 11 जी डेटाबेस पर SQL डेवलपर 3.1.07 का उपयोग कर रहा हूं जब मैं किसी फ़ील्ड से एकाधिक मान निकालने के लिए listagg का उपयोग करता हूं तो मुझे परिणामों में प्रत्येक वर्ण के बीच एक स्थान मिलता है listagg कॉलम। क्वेरी उन सभी मूल्यों को लौटाती है जिन्हें मैं देखने की उम्मीद करता हूं, यह केवल अतिरिक्त रिक्त स्थान है जो मुझे पागल कर रहे हैं। कोई विचार?ओरेकल एसक्यूएल डेवलपर 3.1.07 listagg

यहाँ एक प्रश्न है कि मैं का इस्तेमाल किया है, लेकिन यह हर होता है मैं एक प्रश्न में listagg का उपयोग करें:

select a.personnum Emp_ID 
     , a.personfullname Name 
     , a.companyhiredtm Hire_Date 
     , a.employmentstatus Status 
     , a.employmentstatusdt Status_Date 
     , h.Supervisor, h.Agency 
from vp_employeev42 a 
    left outer join (select f.personid 
          , listagg (g.personcstmdatatxt, ',') within group 
           (order by g.customdatadefid) Supervisor 
        from vp_employeev42 f 
        left outer join personcstmdata g 
         on f.personid = g.personid 
        where f.personnum like 'T%' 
        and f.homelaborlevelnm3 = '1872' 
        and (g.customdatadefid = '1' 
          or g.personcstmdatatxt is null) 
        group by f.personid) h 
      on a.personid = h.personid 
    left outer join (select f.personid 
         , listagg (g.personcstmdatatxt, ',') 
           within group (order by g.customdatadefid) Agency 
        from vp_employeev42 f 
        left outer join personcstmdata g 
          on f.personid = g.personid 
        where f.personnum like 'T%' 
        and homelaborlevelnm3 = '1872' 
        and (g.customdatadefid = '3' 
           or g.personcstmdatatxt is null) 
         group by f.personid) h 
     on a.personid = h.personid 
where personnum like 'T%' 
and homelaborlevelnm3 = '1872' 
order by personnum; 

यहाँ परिणाम मैं कर रहे हैं:

EMP_ID,NAME,HIRE_DATE,STATUS,STATUS_DATE,SUPERVISOR,AGENCY 
T98999,Lxxxxm, Lxxxn,20-SEP-12,Active,20-SEP-12,, S t a f f m a r k 

T98989,Fxxxxn, Dxxxxa,10-DEC-12,Active,10-DEC-12,, S t a f f m a r k 

T99989,Hxxxs, Cxxxxxa,02-OCT-12,Active,02-OCT-12,, S t a f f m a r k 
T99999,Hxxxs, Dxxxn,30-JAN-12,Terminated,21-MAY-12, C x x x x x x x x x r T x x x x r, P R O L O G I S T I X 
+0

भविष्य में कृपया कोड को समझने के लिए कड़ी मेहनत के एक बड़े हिस्से के बजाय * छोटे प्रतिलिपिबद्ध * परीक्षण केस पोस्ट करें। किसी और चीज के अलावा, अपनी जरूरी चीजों को उबालने का कार्य अक्सर समाधान प्रदान करता है, जो सीखने का सबसे अच्छा तरीका है। – APC

उत्तर

13

आप UTF-16 उपयोग कर रहे हैं + किसी भी मौके से NVARCHAR2? उदाहरण के लिए:

SQL> select * from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET'; 

PARAMETER      VALUE 
------------------------------ ---------------------------------------- 
NLS_NCHAR_CHARACTERSET   AL16UTF16 

SQL> drop table test; 

Table dropped. 

SQL> create table test(a nvarchar2(10)); 

Table created. 

SQL> insert into test values ('test'); 

1 row created. 

SQL> insert into test values ('test 2'); 

1 row created. 

SQL> select listagg(a, ',') within group (order by 1) from test group by 1; 

LISTAGG(A,',')WITHINGROUP(ORDERBY1) 
-------------------------------------------------------------------------------- 
t e s t, t e s t 2 

आप इसे पाने के लिए एक char पर जा सकते हैं। अगर यह स्वीकार्य नहीं है, तो आपको ओरेकल समर्थन के साथ टिकट जुटाने की जरूरत है।

SQL> select listagg(to_char(a),',') within group (order by 1) from test group by 1; 

LISTAGG(TO_CHAR(A),',')WITHINGROUP(ORDERBY1) 
-------------------------------------------------------------------------------- 
test,test 2 

SQL> 
+0

यह चाल थी, मैं यूटीएफ -16 + एनवीएचकएआर 2 का उपयोग कर रहा हूं और to_char का उपयोग कर रहा हूं। मदद के लिए बहुत बहुत धन्यवाद। –

5

यह वर्तमान में कोई फिक्स के साथ एक ज्ञात बग है:

बग 13,501,087 11.2.0.3 आरडीबीएमएस 11.2.0.3 एसक्यूएल कार्यान्वयन PRODID -5 PORTID-226

सार: LISTAGG रिटर्न अजीब आंकड़े

*** 12/14/11 05:12 am *** (ADD: Impact/Symptom->WRONG RESULTS) 

    SubComponent: SQL Analytics 
    =========================== 
    DETAILED PROBLEM DESCRIPTION 
    ============================ 
    When using LISTAGG function with NVARCHAR , data is returned with spaces 
    between characters 
संबंधित मुद्दे