繁体   English   中英

使用子查询postgres的结果更新CASE语句中的列

[英]Update column within CASE statement with results of a subquery postgres

我需要根据子查询的结果更新一列。 如果子查询返回该列的结果,则必须更新这些列,如果查询没有返回该列的结果,那么我需要用0更新。

我不知道在哪里放置子查询以及如何将其与CASE语句结合使用。 这是我的想法,但是语法不正确。 有人可以帮忙吗?

(SELECT datazones.ogc_fid, count(*) as total 
FROM suppliersnew suppliers, datazone_report_resupply datazones
WHERE St_contains(datazones.geom, suppliers.geometry) AND (suppliers.status = 'Under construction' OR
suppliers.status = 'Unknown' OR suppliers.status = 'Operational') GROUP by datazones.ogc_fid ORDER BY total ASC) sources 

UPDATE datazone_report_resupply
SET es_actual =
CASE 
    WHEN datazone_report_resupply.ogc_fid = sources.ogc_fid THEN sources.total
    ELSE 0
END

该查询有些困难,因为聚合位于外部列上(这是不寻常的)。 但是,您不需要聚合或排序。 您似乎只在乎是否存在行。

我认为逻辑是:

UPDATE datazone_report_resupply r
SET es_actual =
    (CASE WHEN EXISTS (SELECT 1
                       FROM suppliersnew s
                       WHERE St_contains(r.geom, s.geometry) AND
                             s.status IN ('Under construction', 'Unknown', 'Operational')
                      ) 
          THEN 1 ELSE 0
      END);

暂无
暂无

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

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