将“group by”生成的单个字段结果行转换为单个结果行的单独列

时间:2017-12-17 12:44:45

标签: sql postgresql

目前我得到这样的结果(2个结果行):

type|totalUnits
N   | 111
E   | 67 

但是,我想得到这样的结果(1个结果行):

totalUnitsN|totalUnitsE|totalOfBothNandE
111        |67         | 178

是否有一些方便/推荐的SQL-snippet可用于将第一个示例转换为第二个示例?基本上,第一个示例是通过基于类型字段对所有数据进行分组,然后将大约20列汇总到该一个totalUnit字段来生成的。基本上我想保持该查询,然后以某种方式将该数据转换/“合并”到一行。但如果最好的方法不包括我目前的第一步,我也可以考虑从头开始编码。

1 个答案:

答案 0 :(得分:2)

条件聚合似乎很简单:

select sum(case when type = 'N' then totalUnits else 0 end) as totalUnits_N,
       sum(case when type = 'E' then totalUnits else 0 end) as totalUnits_E,
       sum(totalUnits) as totalUnits
from t
where type in ('N', 'E');