Вы можете «распределить» столбцы на основе значения с помощью оператора CASE
:
SELECT id,
date,
case when comments not like 'RR:%' then comments end as A_comment,
case when comments like 'RR:%' then comments end as D_comment
FROM my_table;
Вывод будет
ID DATE A_comments D_comments
101 23/Jun/2018 Next week apply for leave
101 23/Jun/2018 RR: Insufficient resource
102 22/Jun/2018
103 21/Jun/2018 Go ahead
Поэтому вам нужно «сложить» столбцы в один ряд, например, с помощью MAX
:
SELECT id,
date,
MAX(case when comments not like 'RR:%' then comments end) as A_comment,
MAX(case when comments like 'RR:%' then comments end) as D_comment
FROM my_table
GROUP BY id, date;
, который будет генерировать
ID DATE A_comments D_comments
101 23/Jun/2018 Next week apply for leave RR: Insufficient resource
102 22/Jun/2018
103 21/Jun/2018 Go ahead
EDIT:
Чтобы отразить ваш комментарий, чтобы добавить все комментарии, вы можете использовать LISTAGG
вместо MAX
:
SELECT id,
date,
LISTAGG(case when comments not like 'RR:%' then comments end, '-'
WITHIN GROUP (ORDER BY comments)) as A_comment,
MAX(case when comments like 'RR:%' then comments end) as D_comment
FROM my_table
GROUP BY id, date;