2016-04-18 7 views
0

サブクエリの結果に基づいてカラムを更新する必要があります。サブクエリがその列の結果を返す場合は、列を更新する必要があります。クエリでその列の結果が返されない場合は、0で更新する必要があります。サブクエリpostgresの結果でCASE文内のカラムを更新

サブクエリとその結合方法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 

答えて

0

クエリは、従うことが少し難しいです。しかし、あなたは集計や注文は必要ありません。行が存在するかどうかは気になるようです。

私はロジックがあると思う:

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); 
関連する問題