как можно использовать цикл или IF в случае, когда операторы в postgresql - PullRequest
0 голосов
/ 28 мая 2018
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

У меня есть несколько операторов case в моей функции PL / Pgsql, в которых я получаю дублирующиеся строки (с дублирующимися vrgids).Ниже приведен результат запроса

enter image description here

Здесь (отмеченная строка) с идентификатором 7192 является результатом первого оператора case (см. Запрос). Я хотел бы использовать цикл использованияили если условие для удаления vrgid и соответствующих весовых коэффициентов из результата, если 1-й оператор case верен.Так что я не буду получать дубликаты записей.Как это возможно?

Может быть, я должен использовать условие в 3-м операторе, чтобы получить результат vrgids, отсутствующий в 1-м операторе case.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...