преобразовать столбец в строку в базе данных postgresql - PullRequest
0 голосов
/ 24 мая 2018

Мой текущий запрос:

select rulename,status, count(*)
from triggered_rule_info
group by status, rulename

И результат:

rulename    status  count
eorule1      ack    1
eorule1      open   1
eorule1      close  7
eorule2      open   1
eorule2      ack    1

Но я хочу, чтобы результат был:

rulename     ack    open    close
eorule1       1      1       7
eorule2       1      1  

Как можноЯ достиг этого?Моя версия postgresql - 9.4.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Для этого вы можете использовать предложение filter:

select rulename
       count(*) filter (where status = 'ack') as ack,
       count(*) filter (where status = 'open') as open,
       count(*) filter (where status = 'close') as closed
from triggered_rule_info
group by rulename
order by rulename;
0 голосов
/ 24 мая 2018

Вы можете использовать предложения CASE - WHEN и GROUP BY, чтобы получить желаемый результат.Вам может потребоваться добавить больше CASE операторов, если status имеет больше других значений.

Пример :

SELECT rulename
     , SUM( CASE status WHEN 'ack' THEN 1 ELSE 0 END ) AS "ack"
     , SUM( CASE status WHEN 'open' THEN 1 ELSE 0 END ) AS "open"
     , SUM( CASE status WHEN 'close' THEN 1 ELSE 0 END ) AS "close"
  FROM triggered_rule_info
 GROUP BY rulename
 ORDER BY rulename
...