如果在postgresql中的语句时如何使用循环或IF

时间:2018-05-28 07:20:20

标签: postgresql

select distinct
  x.vrgid, x.Weights, x.geom
from
  (select
     -- postcodes.id as postcodeid ,,fishnet.geom as geom
     fishnet.gid  as vrgid,
     fishnet.geom as geom,

     CASE WHEN
       st_intersects(centroids.geom, urban.geom) and counts.nonurbancells != 0
       THEN 0.95 :: numeric / counts.urbancells -------1st case
     WHEN st_intersects(centroids.geom, urban.geom) and counts.nonurbancells = 0
       THEN 1.00 :: numeric / counts.urbancells ---2ndcase
     WHEN Not st_intersects(centroids.geom, urban.geom) = fishnet.gid :: boolean and counts.nonurbancells != 0
       THEN 0.05 :: numeric / counts.nonurbancells ----3rd case
     ELSE 0
     END          AS Weights
   from vrg.urban_nonurban_count_new as counts 
     inner join vrg.gfk_2016_id_5_digit_pcd_areas2013_projected as postcodes on postcodes.id = counts.postid
     right outer join vrg.rdsid_86_quadgrid_centroids as centroids on st_contains(postcodes.geom, centroids.geom)
     left outer join vrg.rdsid86_quadgrid AS fishnet on fishnet.gid = centroids.gid
     right outer join vrg.rdsid86_katrisk_poly_projected as urban on st_intersects(urban.geom, fishnet.geom)
   where postcodes.id = '42395') as x

我的PL / Pgsql函数中有几个case语句,其中我得到重复的行(带有重复的vrgids)。以下是查询结果

enter image description here

这里(标记的行)id为7192是第一种情况声明的结果(参考查询) 我想要做的是使用循环或if条件从第一个case语句为真后从结果中删除vrgid和相应的权重。 所以我不会得到重复的记录。怎么可能?

可能是我应该在第3个语句中使用条件来得出第1个案例语句中没有的vrgids。

0 个答案:

没有答案