Menggabungkan Kolom Tabel Atribut QGIS

10

Saya memiliki dua kolom di tabel atribut QGIS saya. Kolom pertama berisi nilai-nilai yang tidak berisi kolom kedua dan sebaliknya. Saya ingin menambahkan bidang baru yang berisi nilai dari kolom pertama dan kedua. Saya pikir mungkin sesederhana "Nilai 1 + Nilai 2) tetapi ini hanya memberi saya hasil Null . Semua nilai adalah string.

Value 1| Value 2 | New Column
-------------------------
 Bacon |         | Bacon
 Eggs  |         | Eggs
       | Cheese  | Cheese
       | Ham     | Ham  
Dunuts
sumber
Ini agak ambigu dari kata-kata pertanyaan jika Anda ingin menyatukan: "Saya ingin menambahkan bidang baru yang berisi nilai dari kolom pertama dan kedua." akan menunjukkan gabungan tetapi dalam contoh Anda, Anda tidak memiliki kejadian kedua bidang memiliki nilai. Yang mana itu?
Gabriel C.
@GabrielC. Kedua kolom tidak memiliki nilai, di mana pun satu kolom memiliki nilai, kolom lainnya tidak. Saya harap ini membantu.
Dunuts

Jawaban:

22

Banyak operator dan fungsi dalam SQL (dan karenanya ekspresi) kembali NULLjika salah satu parameternyaNULL

Contoh-contoh berikut menunjukkan perilaku berbagai operator pada lapisan dengan kolom Adan 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'

Dalam kasus Anda, Anda ingin bekerja dengan salah satu CONCATatau COALESCEtergantung pada perilaku yang diharapkan dengan beberapa nilai / tidak.

Matthias Kuhn
sumber
1
Sayang sekali ini bukan jawaban yang diterima, saya pikir ini adalah yang terbaik karena menjelaskan bagaimana berbagai operator berperilaku, menciptakan masalah yang disebutkan dalam OP.
Gabriel C.
15

Anda bisa menggunakan kalkulator lapangan dan ikuti langkah-langkah ini:

1- Buat bidang baru (string)

2- Gunakan Fungsi "Penggabungan"

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

Fungsi Colaesce mengembalikan yang pertama bukan NULL

masukkan deskripsi gambar di sini

Carlos López Quintanilla
sumber
3

Pilih layer di panel layer dan buka konsol python dan jalankan cuplikan ini:

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()
artwork21
sumber
2

Anda juga bisa menggunakan kalkulator bidang, menambahkan bidang baru, dan memberi dia informasi berikut

CASE WHEN "column1" IS NULL
THEN "column2"
ELSE "column1"
END
Erik
sumber