2017-03-14 5 views
0

Wie der Titel schon sagt, ich brauche agg mit dieser Abfrage das Ergebnis Abfrage mit Zeichenfolge verketten (Ohne String Agg)postgresql String agg numerisch/integer Ausgabeergebnis ist falsch

select pdet.dept_id, pdet.grade_id 
from psa_aso_target ptar 
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18' 

und das Ergebnis ist diese

result

und fügen Sie dann i String agg

select pdet.dept_id, string_agg(distinct pdet.grade_id::char,'|') as grade 
from psa_aso_target ptar 
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18' 
group by pdet.dept_id 

und ich erwarte das Ergebnis Ergebnis ist

dept_id | grade_id 
     2 | 1|2|3 
     3 | 4|13|14|15|18 
     5 | 6|10|17 
    63 | 2|4|7 

Aber das Ergebnis i bekommen ist

dept_id | grade_id 
     2 | 1|2|3 
     3 | 1|4 
     5 | 1|6 
    63 | 2|4|7 

irgendeine Idee?

Antwort

2

Dies liegt daran, dass Sie den numerischen Wert in char (1) umgewandelt haben. Durch Gießen es auf char (1) Sie den Wert auf 1 Zeichen gestutzt nur, so 13, 14, 15, alle 18 1 werden

Sie die Katze muss es VARCHAR oder Text:

select pdet.dept_id, string_agg(distinct pdet.grade_id::varchar,'|') as grade 
from psa_aso_target ptar 
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18' 
group by pdet.dept_id 

select pdet.dept_id, string_agg(distinct pdet.grade_id::text,'|') as grade 
from psa_aso_target ptar 
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18' 
group by pdet.dept_id 

Danke an die Kommentatoren für den Beitrag zur Antwort

+0

Vielen Dank für Ihre Antwort, nur :: Varchar Arbeit gut –

+2

Oder einfach auf '' Text' –