简体   繁体   中英

how to get unique data from multiple columns in db2

I wanted to get data from 2 columns in below way:

Id1 id2 id3
1    1    2
2    3    null
2    4    null

O/p

Id1 data
1    1,2
2    3,4

Here id1 is pk and id2 and id3 is fk of other table.

This is a bit strange -- concatenating both within the same row and across multiple rows. One method is to unpivot and then aggregate:

select id1, listagg(id2, ',') within group (order by id2)
from (select id1, id2 from t union all
      select id1, id3 from t
     ) t
where id2 is not null
group by id1;

Assuming that only id2 could be NULL , you can also express this as:

select id1,
       listagg(concat(id2, coalesce(concat(',', id3), '')), ',') within group (order by id2)
from t
group by id1;

Try this as is:

WITH TAB (ID1, ID2, ID3) AS 
(
VALUES 
  (1, 1, 2)
, (2, 3, NULL)
, (2, 4, NULL)
)
SELECT ID1, LISTAGG(DISTINCT ID23, ',') AS DATA
FROM
(
SELECT T.ID1, CASE V.ID WHEN 2 THEN T.ID2 ELSE T.ID3 END AS ID23
FROM TAB T
CROSS JOIN (VALUES 2, 3) V(ID)
)
WHERE ID23 IS NOT NULL
GROUP BY ID1;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM