Tabla de atributos de QGIS de combinación de columnas


10

Tengo dos columnas en mi tabla de atributos QGIS. La primera columna contiene valores que no están contenidos en la segunda columna y viceversa. Me gustaría agregar un nuevo campo que contenga los valores de la primera y segunda columna. Pensé que podría ser tan simple como "Valor 1 + Valor 2), pero esto me da resultados nulos . Todos los valores son cadenas.

Value 1| Value 2 | New Column
-------------------------
 Bacon |         | Bacon
 Eggs  |         | Eggs
       | Cheese  | Cheese
       | Ham     | Ham  

Es un poco ambiguo de la redacción de la pregunta si desea concatenar: "Me gustaría agregar un nuevo campo que contenga los valores de la primera y segunda columna". indicaría concatenación pero en su ejemplo no tiene ocurrencias de que ambos campos tengan valores. Cual es
Gabriel C.

@GabrielC. Ambas columnas no tienen valores, donde una columna tiene un valor, la otra columna no. Espero que esto ayude.
Dunuts

Respuestas:


22

Muchos operadores y funciones en SQL (y, por lo tanto, expresiones) regresan NULLsi uno de los parámetros eraNULL

Los siguientes ejemplos demuestran el comportamiento de varios operadores en una capa con las columnas Ay B.

"A" + "B"

  • NULL + 'text'NULL
  • 'a' + 'b''ab'

"A" || "B"

  • NULL || 'text'NULL
  • 'a' || 'b''ab'

CONCAT("A", "B")

  • CONCAT(NULL, 'text')'text'
  • CONCAT('a', 'b')'ab'

COALESCE("A", "B")

  • COALESCE(NULL, 'text')'text'
  • COALESCE('a', 'b')'a'
  • COALESCE('a', NULL)'a'
  • COALESCE(NULL, NULL, 'Other')'Other'

En su caso, desea trabajar con cualquiera CONCATo COALESCEdependiendo del comportamiento esperado con múltiples / sin valores.


1
Es una pena que esta no sea la respuesta aceptada, creo que esta es la mejor, ya que explica cómo se comportan los diferentes operadores, creando el problema mencionado en el OP.
Gabriel C.

15

Puede usar la calculadora de campo y seguir estos pasos:

1- Crear nuevo campo (cadena)

2- Utilice la función "Fusionar"

       coalesce(  "Value 1" , "Value 2" , 'value if No data')

La función Colaesce devuelve el primer no NULL

ingrese la descripción de la imagen aquí


3

Seleccione la capa en el panel de capas y abra la consola de Python y ejecute este fragmento:

layer = iface.activeLayer()
layer.startEditing()
fields = layer.pendingFields()
fieldIndex = fields.indexFromName('newColumn')
for feature in layer.getFeatures():
    if feature['value1']:
        layer.changeAttributeValue(feature.id(),fieldIndex,feature['value1'])
    if feature['value2']:
        layer.changeAttributeValue(feature.id(),fieldIndex,feature['value2'])
    if feature['value1'] and feature['value2']:
        layer.changeAttributeValue(feature.id(),fieldIndex,feature['value2'] + ' ' + feature['value2']) # not sure what you want to do here if values found in both value1 and value2 fields
layer.commitChanges()

2

También puede usar la calculadora de campo, agregar un nuevo campo y alimentarlo con lo siguiente

CASE WHEN "column1" IS NULL
THEN "column2"
ELSE "column1"
END
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.