2011-12-16 12 views
7

यह एक साधारण सवाल हो सकता है, लेकिन यह वह है जिसे मैंने पहले कभी नहीं देखा है। क्या किसी स्टेटमेंट की स्थिति का उपयोग करने के लिए कोई तरीका है? यह उन मामलों में वास्तव में उपयोगी होगा जहां यह निर्धारित करने के लिए बहुत सी गणना की जाती है कि कोई निश्चित शर्त पूरी हो जाती है और यदि यह है, तो गणना परिणाम है।क्या कोई कथन की स्थिति का उपयोग करने के लिए कोई तरीका है?

एक उदाहरण के रूप:

if ([intense calculation] > 0, [same intense calculation], 0) 

मैं, विशेष रूप से एसक्यूएल के संबंध में इच्छुक हूँ के रूप में मैं पहुँच में एक रिपोर्ट पर काम कर रहा हूँ अभी और इतने में तीव्र गणना के परिणाम को संग्रहीत नहीं कर सकता एक परिवर्तनीय।

उत्तर

6

सुनिश्चित नहीं हैं कि अगर इस तरह के एक अवधारणा एमएस एक्सेस रिपोर्ट दुनिया में मौजूद है, लेकिन कैसे के बारे में:

MAX([intense calculation], 0)

इस तरह के दृष्टिकोण का स्पष्ट लाभ यह है कि गणना एक बार करना होगा की जरूरत है केवल होता है।

+0

और अगर आप वैरिएबल न्यूल के मामले में एक डिफ़ॉल्ट मान चाहते हैं, वहां एनवीएल (ऑरैकल में) है और दुख की बात है कि हर कोई इसे एक अलग लेकिन अभी भी बेहद उपयोगी कहता है और मुझे लगता है कि हर डीबीएमएस में ऐसा कुछ है। – Voo

+0

और क्या होगा यदि intense_calculation 0 से कम है? – mkk

+0

@ एमकेके, तो परिणाम 0 है, पोस्टर के आईएफ कथन के समान है। –

0

एसक्यूएल के अधिकांश रूपों में एक दृष्टिकोण, एक उप क्वेरी के लिए मुख्य क्वेरी स्थानांतरित करने के लिए तीव्र गणना स्तंभ एलियास और नए बाहरी क्वेरी में परीक्षण के साथ हो सकता है - तो की तरह:

select v.*, 
     case intense_calc > 0 then intense_calc else 0 end as positive_calc 
from (select [intense calculation] as intense_calc, 
      [other columns] 
     from ...) as v 
+0

हाँ, मुझे लगता है कि यह जाने का रास्ता है। मैं इसे इस तरह से करने के बारे में सोच रहा था, लेकिन यह देखना चाहता था कि शायद कुछ अस्पष्ट वाक्यविन्यास था जो मुझे नहीं पता था कि इस स्थिति का संदर्भ दे सकता है। धन्यवाद! – Will

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