6 votos

Concatenar múltiples campos donde algunos contienen valores nulos (QGIS)

En QGIS 3.18. En una tabla de atributos de un shapefile, necesito crear un campo que concatene varios otros campos con un delimitador de comas. Algunos de esos campos son NULL.

Actualmente mi enfoque ha sido el que creía que era el infalible "Field1" || ', ' || "Field2" || ', ' || "Field3" . Si los 3 campos contienen un valor no nulo, no hay problema (ejemplo: Campo1=A, Campo2=B, Campo3=C, resultado=A, B, C)

Sin embargo, si uno o más campos son NULL, el resultado también es NULL. (ejemplo: Campo1=A, Campo2=NULL, Campo3=C, resultado=NULL).

Sospecho que hay una forma de tener en cuenta los valores NULL en la calculadora de campos sin recurrir a Python. No creo que concat o coalesce puede ayudarme aquí, pero por favor corrígeme si me equivoco.

Nota: aquí no me preocupan las etiquetas, sólo los atributos.

4voto

chhh Puntos 1154
  1. Primera posibilidad: utilizar concat y reemplazar las comas dobles donde tenga entradas vacías:

    replace( concat (field_a,', ',field_b,', ',field_c), ', ,', ',')

  2. Segunda posibilidad: usar arrays para concatenar, ellos concatenan NULL como cadenas vacías que luego puede eliminar. Utilice una de estas expresiones:

    replace( array_to_string (array (field_a,field_b,field_c)),',,',',')

O, alternativamente:

array_to_string (array_remove_all (array (field_a,field_b,field_c),''))

enter image description here

1voto

chhh Puntos 1154

Otra posibilidad en caso de que quiera concatenar todos los campos de su tabla de atributos: map_akeys( attributes( )) obtiene los nombres de todos los atributos, array_to_string con delimitador + obtiene una cadena como a+b+c que luego se puede evaluar con eval() para que se sumen los contenidos reales de a, b y c:

eval (array_to_string (map_akeys( attributes( )), delimiter:='+'))

enter image description here

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