как получить уникальные данные из нескольких столбцов в db2 - PullRequest
0 голосов
/ 30 марта 2020

Я хотел получить данные из 2 столбцов следующим образом:

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

O / p

Id1 data
1    1,2
2    3,4

Здесь id1 - это pk, а id2 и id3 - это fk другой таблицы.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Попробуйте как есть:

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;
0 голосов
/ 30 марта 2020

Это немного странно - объединение как внутри одной строки, так и между несколькими строками. Один метод состоит в том, чтобы отключить и затем агрегировать:

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;

Если предположить, что только id2 может быть NULL, вы также можете express это как:

select id1,
       listagg(concat(id2, coalesce(concat(',', id3), '')), ',') within group (order by id2)
from t
group by id1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...