1

Table t1:

pk_id | col1 | col2 | col3
===========================
1     | val1 | val2 | val3

Table t2: (fk_id is foreign key references to pk_id)

fk_id | col4
=============
1     | val4A
1     | val4B
1     | val4C

My SQL query is:

select pk_id,col1,col2,col3,col4
from t1 left join t2 on t1.pk_id=t2.fk_id;

The result is:

pk_id | col1 | col2 | col3 | col4
===================================
1     | val1 | val2 | val3 | val4A
1     | val1 | val2 | val3 | val4B
1     | val1 | val2 | val3 | val4C

But I actually want this result:

pk_id | col1 | col2 | col3 | col4
===============================================
1     | val1 | val2 | val3 | val4A;val4B;val4C

How to change the 'select' query to achieve this result with col4 value is the combined values of val4A, val4B, val4C (separated by semicolons)?

a_horse_with_no_name
  • 497,550
  • 91
  • 775
  • 843
jondinham
  • 7,943
  • 16
  • 76
  • 132

1 Answers1

2

You can use LISTAGG for that.

select pk_id,col1,col2,col3,
                    LISTAGG (t2.col4, ';') WITHIN GROUP (ORDER BY t2.col4) AS col4
from t1 left join t2 on t1.pk_id=t2.fk_id
group by pk_id, col1, col2, col3;
Yigitalp Ertem
  • 1,821
  • 22
  • 25