2010-05-26 18 views
10

मैं एक पोस्टग्रेएसक्यूएल डेटाबेस का उपयोग कर रहा हूं, और कुछ मापों का प्रतिनिधित्व करने वाली तालिका में मेरे पास दो कॉलम हैं: माप, और इंटरपोलेटेड। पहले में मैंने अवलोकन (माप) किया है, और दूसरे में पास के मूल्यों के आधार पर इंटरपोलेटेड मान है। मूल मूल्य वाले प्रत्येक रिकॉर्ड में एक अलग मूल्य भी होता है। हालांकि, "मूल" अवलोकनों (एनयूएलएल) के बिना बहुत सारे रिकॉर्ड हैं, इसलिए मूल्य दूसरे कॉलम में अलग-अलग होते हैं और संग्रहीत होते हैं। तो मूल रूप से वहाँ डेटाबेस में सिर्फ दो मामलों रहे हैं:एसक्यूएल एक फ़ील्ड के मूल्य के आधार पर दो फ़ील्ड के बीच चयन करें

Value Value 
NULL Value 
बेशक

, यह पहली स्तंभ से मान का उपयोग करने के यदि उपलब्ध हो, इसलिए मैं पहले कॉलम से डेटा का चयन करने के एक प्रश्न का निर्माण करने की जरूरत है बेहतर है , और यदि उपलब्ध नहीं है (NULL), तो डेटाबेस प्रश्न में रिकॉर्ड के लिए दूसरे कॉलम से मान देता है। मुझे नहीं पता कि SQL क्वेरी कैसे बनाएं।

कृपया मदद करें। धन्यवाद।

उत्तर

27

आप Coalesce उपयोग कर सकते हैं:

COALESCE समारोह अपने तर्कों है कि रिक्त नहीं है के पहले देता है। नल केवल तभी लौटाया जाता है जब सभी तर्क शून्य हो जाएं।

Select Coalesce(first_value, second_value) 
From your_table 

यह first_value वापसी होगी अगर यह NULL, second_value अन्यथा नहीं है।

+0

यदि पहला मान शून्य है तो क्या आप तीसरे मान चाहते हैं ?? – Joe

+1

क्या आपका मतलब है 'COALESCE (first_value, second_value, third_value)'? यदि यह पहला और दूसरा मान 'NULL' है तो यह' third_value' वापस करेगा। –

+0

धन्यवाद लेकिन मुझे तीसरा मान केवल तभी चाहिए जब पहला मान शून्य हो। मुझे लगता है कि मैं जो चाहता था उसे पाने के लिए मैंने 2 चयनों का यूनियन किया था। सबसे पहले सभी रिकॉर्ड्स प्राप्त करें जहां प्रथम श्रेणी दूसरे चयन को शून्य नहीं है, जहां पहला मान शून्य है और यह vName को फर्स्टनाम, कन्वर्ट (वर्चर (10), एचआईआईडी, 108) के रूप में अंतिम नाम के रूप में कर रहा है, – Joe

8

पीटर ने इसे खींचा। लेकिन पूर्णता के लिए (आपके प्रश्न का शीर्षक आपके विशेष मुद्दे से अधिक सामान्य है), पोस्टग्रेस्क्ल (और कई अन्य डेटाबेस में) में उपलब्ध conditional expressions के लिए दस्तावेज़ यहां दिए गए हैं: CASE, COALESCE, NULLIF, GREATEST, LEAST। पहला सबसे आम है।

संबंधित मुद्दे