繁体   English   中英

在PostgreSQL数据库中将列转换为行

[英]convert column to row in postgresql database

我当前的查询是:

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。

为此,您可以使用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;

您可以使用CASE - WHENGROUP BY子句来获得所需的结果。 如果status其他值更多,则可能需要添加更多的CASE语句。

范例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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