列の組み合わせQGIS属性テーブル


10

QGIS属性テーブルに2つの列があります。最初の列には2番目の列に含まれていない値が含まれ、その逆も同様です。最初の列と2番目の列の両方の値を含む新しいフィールドを追加したいと思います。「値1 +値2)のように単純かもしれないと思いましたが、これはNullの結果を与えるだけです。すべての値は文字列です。

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

「最初の列と2番目の列の両方の値を含む新しいフィールドを追加したい」と連結したい場合は、質問の文言から少しあいまいです。連結を示しますが、あなたの例では、両方のフィールドに値があることはありません。どっち?
Gabriel C.

@GabrielC。どちらの列にも値がありません。一方の列に値があり、もう一方の列にはありません。これがお役に立てば幸いです。
Dunuts 2018年

回答:


22

SQLの多くの演算子と関数(したがって式)NULLは、パラメータの1つが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で言及されている問題が発生するかを説明しているので、これが最良の答えだと思います。
Gabriel C.

15

フィールド計算機を使用して、次の手順を実行できます。

1-新しいフィールドを作成(文字列)

2-「結合」機能を使用する

       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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.