Sütunları Birleştirme QGIS Özellik Tablosu


10

QGIS öznitelik tablomda iki sütun var. İlk sütun, ikinci sütunu içermeyen değerleri veya tam tersini içerir. Hem birinci hem de ikinci sütundaki değerleri içeren yeni bir alan eklemek istiyorum. Ben "Değer 1 + Değer 2) kadar basit olabileceğini düşündüm ama bu sadece bana Null sonuç verir.Tüm değerler dizelerdir.

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

Birleştirme yapmak istiyorsanız, sorunun ifadesinden biraz belirsiz: "Hem birinci hem de ikinci sütundaki değerleri içeren yeni bir alan eklemek istiyorum." birleştirmeyi gösterir ancak örneğinizde her iki alanın da değerlere sahip olması gerekmez. Hangisi?
Gabriel

@GabrielC. Her iki sütunun da değeri yoktur, bir sütunun diğer sütunun sahip olmadığı bir değeri vardır. Umarım bu yardımcı olur.
Dunuts

Yanıtlar:


22

NULLParametrelerden biri, SQL'deki (ve dolayısıyla ifadeler) birçok işleç ve işlev döndürürNULL

Aşağıdaki örnekler, sütunlu bir katman üzerinde çeşitli operatörler davranışını göstermektedir Ave 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'

Sizin durumunuzda , birden fazla / hiç değeri olmayan beklenen davranışa bağlı olarak ya CONCATda çalışmak istiyorsunuz COALESCE.


1
Bu kabul edilen cevap değil çok kötü, farklı operatörlerin nasıl davrandığını ve OP'de bahsedilen sorunu yaratarak açıkladığını düşünüyorum.
Gabriel

15

Alan hesaplayıcısını kullanabilir ve şu adımları uygulayabilirsiniz:

1- Yeni alan oluştur (dize)

2- "Birleşme" Fonksiyonunu Kullanın

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

Colaesce işlevi ilk NULL değil döndürür

resim açıklamasını buraya girin


3

Katman panelinde katmanı seçin ve python konsolunu açın ve şu parçacığı çalıştırın:

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

Ayrıca alan hesaplayıcısını kullanabilir, yeni bir alan ekleyebilir ve ona aşağıdakileri besleyebilirsiniz:

CASE WHEN "column1" IS NULL
THEN "column2"
ELSE "column1"
END
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.