কলামগুলি কিউজিআইএস বৈশিষ্ট্য সারণীর সংমিশ্রণ


10

আমার কিউজিআইএস বৈশিষ্ট্য সারণীতে আমার দুটি কলাম রয়েছে। প্রথম কলামে এমন মান রয়েছে যা দ্বিতীয় কলাম এবং বিপরীতে নেই। আমি একটি নতুন ক্ষেত্র যুক্ত করতে চাই যেখানে প্রথম এবং দ্বিতীয় কলামের দুটি মান রয়েছে contains আমি ভেবেছিলাম এটি "মান 1 + মান 2) এর মতোই সহজ হতে পারে তবে এটি আমাকে নাল ফলাফল দেয় All সমস্ত মানগুলি স্ট্রিং।

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

আপনি যদি বক্তব্য রাখতে চান তবে প্রশ্নের শব্দটি থেকে এটি কিছুটা দ্ব্যর্থহীন: "আমি একটি নতুন ক্ষেত্র যুক্ত করতে চাই যাতে প্রথম এবং দ্বিতীয় স্তরের মান দুটি রয়েছে" " সংমিশ্রনের ইঙ্গিত দেয় তবে উদাহরণস্বরূপ আপনার উভয় ক্ষেত্রেই মান রয়েছে। ইহা কোনটা?
গ্যাব্রিয়েল সি

@GabrielC। উভয় কলামের মান নেই, যেখানেই একটি কলামের অন্য কলামের মান থাকবে। আশা করি এটা কাজে লাগবে.
ডানটস

উত্তর:


22

এসকিউএল-তে অনেক অপারেটর এবং ফাংশন (এবং তাই এক্সপ্রেশন) 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" ফাংশন ব্যবহার করুন

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

কোলেসেস ফাংশনটি প্রথমে NULL দেয় না

এখানে চিত্র বর্ণনা লিখুন


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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.