Получение pivot-подобной операции, достигнутой в pgsql - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь получить статус ошибок на основе идентификаторов ошибок и когда они меняются. При использовании запроса ниже:

select b.bug_id,b.creation_ts as issue_reported,ba.added,ba.bug_when
from bugs b
join bugs_activity ba on b.bug_id = ba.bug_id
join fielddefs fd on ba.fieldid = fd.id
where fd.name = 'bug_status'  order by b.bug_id

Я получаю набор результатов (поднабор, как показано ниже)

bugid         issue_reported            added          bug_when
61            06-06-2019 9:00           Confirmed      06-06-2019 9:00
61            06-06-2019 9:00           In_Progress    06-06-2019 10:00
61            06-06-2019 9:00           Resolved       06-06-2019 15:00
61            06-06-2019 9:00           Verified       06-07-2019 11:00

Как я могу изменить свой запрос, чтобы получить набор результатов, как показано ниже:

bugid issue_reported Confirmed      In_Progress    Resolved    Verified  
61    06-06-2019 9:00 06-06-2019 9:00 06-06-2019 10:00 06-06-2019 15:00 06-07-2019 11:00

Я имею в виду одну строку.

1 Ответ

1 голос
/ 07 июня 2019

В дополнение к существующему запросу вы хотите GROUP BY bug_id, issue_reported и транспонировать строки в столбцы с помощью такой организации:

SELECT bugid,
 issue_reported,
 max(case when added='Confirmed' then bug_when end) AS "Confirmed",
 max(case when added='In_Progress' then bug_when end) AS "In_Progress",
 ... repeat this for each value of "added" to transpose to rows
FROM (
  -- the query from your question as a subquery 
  select b.bug_id,b.creation_ts as issue_reported,ba.added,ba.bug_when
  from bugs b
  join bugs_activity ba on b.bug_id = ba.bug_id
  join fielddefs fd on ba.fieldid = fd.id
  where fd.name = 'bug_status'
) subq
GROUP BY bugid, issue_reported
ORDER BY 1;
...