कॉलम QGIS विशेषता तालिका का संयोजन


10

मेरे QGIS विशेषता तालिका में दो कॉलम हैं। पहले कॉलम में वे मान शामिल हैं जो दूसरे कॉलम में शामिल नहीं हैं और इसके विपरीत। मैं एक नया क्षेत्र जोड़ना चाहता हूं जिसमें पहले और दूसरे कॉलम के मूल्य शामिल हैं। मुझे लगा कि यह "मान 1 + मान 2) जितना सरल हो सकता है, लेकिन यह मुझे केवल अशक्त परिणाम देता है । सभी मूल्य तार हैं।

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

यदि आप निष्कर्ष निकालना चाहते हैं तो यह प्रश्न के शब्दांकन से थोड़ा अस्पष्ट है: "मैं एक नया क्षेत्र जोड़ना चाहूंगा जिसमें पहले और दूसरे कॉलम के मूल्य शामिल हैं।" संघटन का संकेत देगा, लेकिन आपके उदाहरण में आपके पास दोनों क्षेत्रों के मूल्य नहीं हैं। यह किसका है?
गेब्रियल सी।

@GabrielC। दोनों स्तंभों में मान नहीं है, जहाँ एक स्तंभ का मान है तो दूसरे स्तंभ में नहीं होगा। आशा है कि ये आपकी मदद करेगा।
डंट्स

जवाबों:


22

SQL में कई ऑपरेटर और फ़ंक्शंस (और इसलिए भाव) लौटते हैं NULLयदि कोई पैरामीटर था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
यह बहुत बुरा है यह स्वीकृत उत्तर नहीं है, मुझे लगता है कि यह सबसे अच्छा है क्योंकि यह बताता है कि विभिन्न ऑपरेटर कैसे व्यवहार करते हैं, जो ओपी में वर्णित समस्या का निर्माण करता है।
गैब्रियल सी।

15

आप क्षेत्र कैलकुलेटर का उपयोग कर सकते हैं और इन चरणों का पालन कर सकते हैं:

1- नया फ़ील्ड बनाएं (स्ट्रिंग)

2- "कोलेसस" फ़ंक्शन का उपयोग करें

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

Colaesce फ़ंक्शन पहले पूर्ण नहीं है

यहाँ छवि विवरण दर्ज करें


3

परत पैनल में परत का चयन करें और अजगर कंसोल खोलें और इस स्निपेट को चलाएं:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.