4 votos

¿Por qué las declaraciones de la calculadora de campo de QGIS (IF y CASE) están dando resultados extraños?

El uso de la calculadora de campo, estoy tratando de actualizar un atributo sólo si es igual a cero:

CASE WHEN  "Z" = 0
THEN
"Z" =  rand(1,100)
END

Esto permitió la 0 valores como son y actualizaciones de todos los demás "NULL".

Esta declaración SI no funciona bien:

IF( "Z" = 0,
"Z" = rand(1,100),
"Z" = "Z"
)

Establece todos los valores mayores que cero a 1 y dejar que los otros = 0.

Lo que está mal con estas declaraciones?
Z es un doble.
He pulsado todas las funciones y la de los elementos en la lista de búsqueda por lo que no debería ser de cualquier error tipográfico.

Y qué tipo de lenguaje es esto, no puedo reconocer SQL; parece ser algún tipo de "interno para QGIS idioma".

8voto

tobes Puntos 19

El valor que se escribe en la tabla de atributos depende de lo que la calculadora de campo devuelve. En tu caso:

CASE WHEN  "Z" = 0
THEN "Z" = rand(1,100)
END

significa que compara la Z y del 0, y si que es cierto, que se compara Z y un valor aleatorio entre 1 y 100, que tiene que ser falso, porque Z es 0. Es por eso que se escribe 0 (=Falso) en los campos que fueron 0. Y la expresión no devuelve nada para todos los otros valores de entrada. Por eso es que escribe NULL todas las demás.

Esto significa, que usted tiene que cambiar la expresión de la siguiente manera:

CASE WHEN  "Z" = 0
THEN rand(1,100)
ELSE "Z"
END

Afaik, esto está en línea con SQL interpretada por Postgres, que también es compatible con este tipo de sentencias CASE.

Las declaraciones fueron introducidos por los usuarios querían algo más similares a Excel. Su ejemplo está fallando por la misma razón se ha dicho.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X