首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -在SELECT CASE语句之后合并行

SQL -在SELECT CASE语句之后合并行
EN

Stack Overflow用户
提问于 2016-02-20 16:33:34
回答 2查看 504关注 0票数 1

我希望合并具有从SELECT CASE语句返回的匹配ID的行。我在一个pgAdmin 3数据库上使用PG-9.3.4

这就是我在pgAdmin上要做的:

这就是我想要的:

我尝试过将它分组,或者将结果加入到表本身,但是不起作用。有什么想法吗?

我的查询代码:

代码语言:javascript
复制
SELECT
    CASE
    WHEN t1.material LIKE '%Refuse%'
        THEN t1.disposal
    ELSE NULL
END AS msw_disp,

    CASE
    WHEN t1.material LIKE '%Met%'
        THEN t1.disposal
    ELSE NULL
END AS mgp_disp,

    CASE
    WHEN t1.material LIKE '%Paper%'
        THEN t1.disposal
    ELSE NULL
END AS pap_disp, t1.district

FROM dsny_net t1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-20 16:36:15

AggregateGroup by添加到当前查询应该可以完成任务

代码语言:javascript
复制
SELECT Max(CASE 
             WHEN t1.material LIKE '%Refuse%' THEN t1.disposal 
           END) AS msw_disp, 
       Max(CASE 
             WHEN t1.material LIKE '%Met%' THEN t1.disposal 
           END) AS mgp_disp, 
       Max(CASE 
             WHEN t1.material LIKE '%Paper%' THEN t1.disposal 
           END) AS pap_disp, 
       t1.district 
FROM   dsny_net t1 
GROUP  BY t1.district 
票数 0
EN

Stack Overflow用户

发布于 2016-02-20 17:00:48

作为替代办法:

代码语言:javascript
复制
select
  district,
  unnest(array_agg(disposal) filter (where material like '%Refuse%')) as msw_disp,
  unnest(array_agg(disposal) filter (where material like '%Met%')) as mgp_disp,
  unnest(array_agg(disposal) filter (where material like '%Paper%')) as pap_disp,
from dsny_net
group by district;

使用max将删除除最大值以外的所有其他值(如果有的话)。

但是,unnest(array_agg(disposal) filter (where material like ...)) as ...可以被max(disposal) filter (where material like ...) as..取代,从而使查询更短。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35525924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档