合并列QGIS属性表


10

我的QGIS属性表中有两列。第一列包含的值不包含在第二列中,反之亦然。我想添加一个新字段,其中包含第一列和第二列中的值。我以为它可能很简单,例如“值1 +值2),但这仅给我Null结果。所有值都是字符串。

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

如果要串联,它与问题的措词有点模棱两可:“我想添加一个新字段,其中包含第一列和第二列的值。” 表示串联,但是在您的示例中,两个字段都没有值。哪有
加布里埃尔·C.18年

@GabrielC。两列都没有值,只要一列具有值,另一列就没有值。我希望这有帮助。
Dunuts

Answers:


22

NULL如果参数之一是SQL,则会返回SQL中的许多运算符和函数(以及表达式)。NULL

以下示例通过列A和演示了层上各种运算符的行为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'

在您的情况下,您要使用多个值或不使用值,CONCAT或者COALESCE根据预期的行为使用。


1
太糟糕了,这不是公认的答案,我认为这是最好的答案,因为它解释了不同运算符的行为方式,从而产生了OP中提到的问题。
加布里埃尔·

15

您可以使用字段计算器并按照以下步骤操作:

1-创建新字段(字符串)

2-使用“ Coalesce”功能

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

Colaesce函数返回第一个不为NULL

在此处输入图片说明


3

在“图层”面板中选择图层,然后打开python控制台并运行以下代码段:

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

您还可以使用字段计算器,添加新字段并向他提供以下内容

CASE WHEN "column1" IS NULL
THEN "column2"
ELSE "column1"
END
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.