Estoy tratando de escribir el siguiente comando SQL utilizando el caso de la cláusula.
with x as
(select the_geom as geom from table1
where st_dwithin(the_geom, st_setsrid(st_makepoint(28.959495,41.019913), 4326), 0.00012) limit 1)
select case count(geom)
when 0
then st_setsrid(st_makepoint(28.959495,41.019913), 4326)
when 1
then st_closestpoint(x.geom, st_setsrid(st_makepoint(28.959495,41.019913), 4326))
end as the_geom
from x group by geom
Como se puede ver debajo de la with
cláusula, podría ser una fila o ninguna fila en el registro x
. El código está funcionando bien, donde hay una fila en x
pero cuando la x
es nulo (es decir, count(geom) = 0
), el when 0
operación es no ser ejecutado. Estoy obteniendo el siguiente resultado.
Además, después de modificar mi código SQL, un poco como los siguientes (sólo el when 2
está cambiado!)
with x as
(select the_geom as geom from table1
where st_dwithin(the_geom, st_setsrid(st_makepoint(28.959495,41.019913), 4326), 0.00012) limit 1)
select case count(geom)
when 0
then st_setsrid(st_makepoint(28.959495,41.019913), 4326)
when 2
then st_closestpoint(x.geom, st_setsrid(st_makepoint(28.959495,41.019913), 4326))
end as the_geom
from x group by geom
La salida es similar a la siguiente captura de pantalla cuando el count(geom) = 1
.
Consultas:
1. Cómo ejecutar el when 0
condición cuando el registro x
está vacía?
2. ¿Cuál es la diferencia entre los dos SQL salidas (como se muestra en las capturas de pantalla)?
Gracias por el conocimiento.