दिलचस्प पोस्ट
श्रोताओं की संख्या, सिग्नल आर हब से जुड़े ग्राहकों को प्राप्त करें JQuery के साथ स्ट्रिंग से एक HTML तत्व कैसे प्राप्त करें गिट में लेखक और कमेंटेटर के बीच का अंतर? एएससिंक जनरेटर में वादों का गैर-समानांतर इंतजार के कारण मंदी Windows 7 पर प्रारंभ / एफ़फ़ीनेट कमांड के साथ संबंध स्थापित करें क्या "इस के लिए rvalue संदर्भ" है? कोणीयफायर 2 डेटाबेस में शामिल होने के लिए कैसे करें जावास्क्रिप्ट रेगेक्स, जहां बच पात्रों का उपयोग करना है? N अक्षर के साथ एक स्ट्रिंग बनाएं आर में क्या मतलब है – निजी प्राथमिकता, नामकरण सम्मेलन या अधिक? Google मानचित्र एपीआई V3 पर क्लिक करें infoWindow या InfoBox के साथ ट्रिगर ईवेंट वालग्रेग -जी ध्वज (उबंटू 11.10 / वर्चुअलबॉक्स पर) के बावजूद लाइन नंबर नहीं दिखा रहा है एंड्रॉइड में एक जेसन फाइल पढ़ना एपीपी कोड से एचटीएमएल फॉर्म इनपुट का उपयोग कैसे करें जावास्क्रिप्ट प्रोटोटाइप फ़ंक्शंस में "यह" के संदर्भ को संरक्षित करना

SQL सर्वर में सशर्त WHERE खंड

मैं एक एसक्यूएल क्वेरी बना रहा हूँ जिसमें मुझे एक सशर्त की आवश्यकता है where क्लॉज

यह कुछ ऐसा होना चाहिए:

 SELECT DateAppr, TimeAppr, TAT, LaserLTR, Permit, LtrPrinter, JobName, JobNumber, JobDesc, ActQty, (ActQty-LtrPrinted) AS L, (ActQty-QtyInserted) AS M, ((ActQty-LtrPrinted)-(ActQty-QtyInserted)) AS N FROM [test].[dbo].[MM] WHERE DateDropped = 0 --This is where i need the conditional clause AND CASE WHEN @JobsOnHold = 1 THEN DateAppr >= 0 ELSE DateAppr != 0 END 

उपरोक्त प्रश्न कार्य नहीं कर रहा है। क्या यह सही सिंटैक्स नहीं है या ऐसा करने का एक और तरीका है जिसे मैं नहीं जानता?

मैं गतिशील एसक्यूएल का उपयोग नहीं करना चाहता, इसलिए कोई अन्य तरीका है या क्या मैं एक वैकल्पिक हल का उपयोग करना चाहता हूं जैसे if else और उसी प्रश्न का उपयोग करते हुए अलग-अलग where ?

Solutions Collecting From Web of "SQL सर्वर में सशर्त WHERE खंड"

इसे इस्तेमाल करे

 SELECT DateAppr, TimeAppr, TAT, LaserLTR, Permit, LtrPrinter, JobName, JobNumber, JobDesc, ActQty, (ActQty-LtrPrinted) AS L, (ActQty-QtyInserted) AS M, ((ActQty-LtrPrinted)-(ActQty-QtyInserted)) AS N FROM [test].[dbo].[MM] WHERE DateDropped = 0 AND ( (ISNULL(@JobsOnHold, 0) = 1 AND DateAppr >= 0) OR (ISNULL(@JobsOnHold, 0) != 1 AND DateAppr != 0) ) 

आप यहां सशर्त के बारे में अधिक पढ़ सकते हैं।

इसको आजमाओ –

 WHERE DateDropped = 0 AND ( (ISNULL(@JobsOnHold, 0) = 1 AND DateAppr >= 0) OR (ISNULL(@JobsOnHold, 0) != 1 AND DateAppr != 0) ) 

आपकी क्वेरी के साथ समस्या यह है कि CASE एक्सप्रेशंस में, THEN और ELSE भागों में एक अभिव्यक्ति होती है जो किसी संख्या या वावर्कर या किसी अन्य डेटाटाइप का मूल्यांकन करती है, लेकिन बुलियन मान के लिए नहीं।

आपको बस बूलीयन तर्क (या बल्कि त्रिप्रदेश तर्क जो कि एसक्यूएल का उपयोग करता है) का उपयोग करने की आवश्यकता है और इसे फिर से लिखना होगा:

 WHERE DateDropped = 0 AND ( @JobsOnHold = 1 AND DateAppr >= 0 OR (@JobsOnHold <> 1 OR @JobsOnHold IS NULL) AND DateAppr <> 0 ) 

WHERE खंड में CASE अभिव्यक्ति का उपयोग कैसे करें के अंतर्निहित प्रश्न का उत्तर देने के लिए:

पहले याद रखें कि एक केस अभिव्यक्ति का मान एक सामान्य डेटा प्रकार मान होना चाहिए, बूलियन मान नहीं। यह एक varchar, या एक int, या कुछ होना चाहिए यह एक ही कारण है कि आप SELECT Name, 76 = Age FROM [...] नहीं कह सकते हैं और परिणामस्वरूप सेट में 'Frank', FALSE प्राप्त करने की अपेक्षा करते हैं।

इसके अतिरिक्त, एक WHERE क्लॉज के सभी भावों को बूलियन मान होना चाहिए। वे एक varchar या एक int के मूल्य नहीं हो सकता । आप WHERE Name; नहीं कह सकते WHERE Name; या WHERE 'Frank'; । आपको एक बुलियन अभिव्यक्ति बनाने के लिए एक तुलना ऑपरेटर का उपयोग करना होगा, इसलिए WHERE Name = 'Frank';

इसका अर्थ है कि मामला अभिव्यक्ति एक बूलियन अभिव्यक्ति के एक तरफ होना चाहिए। आपको कुछ करने के लिए सीएई अभिव्यक्ति की तुलना करना पड़ता है यह स्वयं से नहीं खड़ा हो सकता है!

यहाँ:

 WHERE DateDropped = 0 AND CASE WHEN @JobsOnHold = 1 AND DateAppr >= 0 THEN 'True' WHEN DateAppr != 0 THEN 'True' ELSE 'False' END = 'True' 

ध्यान दें कि अंत में कैसे सीएई की अभिव्यक्ति बाईं ओर बुलियन अभिव्यक्ति को 'True' = 'True' या 'False' = 'True'

ध्यान दें कि 'False' और 'True' बारे में कुछ खास नहीं है आप 0 और 1 उपयोग कर सकते हैं यदि आप चाहते हैं, तो भी।

आप आम तौर पर बूलियन अभिव्यक्ति में मामले अभिव्यक्ति को फिर से लिख सकते हैं जो हम से परिचित हैं, और यह आम तौर पर प्रदर्शन के लिए बेहतर है हालांकि, कभी-कभी तर्क को रूपांतरित करने की तुलना में मौजूदा अभिव्यक्ति का उपयोग करने के लिए आसान या अधिक उपयोग करने योग्य है।