sql - एसक - डेटाबेस लैंग्वेज इन हिंदी




मैं एक आईएफ कैसे कर सकता हूं... फिर एक एसक्यूएल चयन में? (16)

SQL सर्वर 2012 से आप इसके लिए IIF फ़ंक्शन का उपयोग कर सकते हैं।

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product 

यह प्रभावी रूप से सिर्फ एक शॉर्टेंड (हालांकि मानक एसक्यूएल नहीं है) CASE लिखने का तरीका है।

विस्तारित CASE संस्करण के साथ तुलना करते समय मैं एकजुटता पसंद करता हूं।

IIF() और IIF() दोनों SQL स्टेटमेंट के भीतर अभिव्यक्ति के रूप में हल होते हैं और केवल अच्छी तरह से परिभाषित स्थानों में उपयोग किए जा सकते हैं।

CASE अभिव्यक्ति का उपयोग ट्रांजैक्ट-एसक्यूएल कथन, कथन ब्लॉक, उपयोगकर्ता परिभाषित कार्यों और संग्रहीत प्रक्रियाओं के निष्पादन के प्रवाह को नियंत्रित करने के लिए नहीं किया जा सकता है।

यदि आपकी ज़रूरतें इन सीमाओं से संतुष्ट नहीं हो सकती हैं (उदाहरण के लिए अलग-अलग आकार के परिणाम सेट करने की आवश्यकता कुछ शर्त पर निर्भर होती है) तो SQL सर्वर में एक प्रक्रियात्मक IF कीवर्ड भी होता है।

IF @IncludeExtendedInformation = 1 
  BEGIN 
      SELECT A,B,C,X,Y,Z 
      FROM   T 
  END 
ELSE 
  BEGIN 
      SELECT A,B,C 
      FROM   T 
  END 

हालांकि इस दृष्टिकोण के साथ पैरामीटर स्नीफिंग मुद्दों से बचने के लिए कभी-कभी देखभाल की जानी चाहिए।

मैं एक IF...THEN कैसे कर सकता हूं IF...THEN एक SQL SELECT कथन में?

उदाहरण के लिए:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product


उदाहरण। कुछ इस तरह।

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END

उन लोगों के लिए जो SQL Server 2012 का उपयोग करते हैं, आईआईएफ एक ऐसी सुविधा है जिसे केस स्टेटमेंट के विकल्प के रूप में जोड़ा गया है और काम करता है।

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product 

एक नई सुविधा, IIF (जिसे हम आसानी से उपयोग कर सकते हैं), SQL सर्वर 2012 में जोड़ा गया था:

SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product

एसक्यूएल सर्वर में सरल अगर-और कथन:

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';

GO

नेस्टेड अगर ... एसक्यूएल सर्वर में अन्य कथन -

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand.';
ELSE
BEGIN
IF @val < 50
  PRINT 'what''s up?';
ELSE
  PRINT 'Bye Ravi Anand.';
END;

GO

माइक्रोसॉफ्ट एसक्यूएल सर्वर (टी-एसक्यूएल)

एक चुनिंदा उपयोग में:

select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end

जहां एक खंड में, उपयोग करें:

where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end

यदि आप पहली बार तालिका में परिणामों को सम्मिलित कर रहे हैं, तो एक तालिका से दूसरे में परिणामों को स्थानांतरित करने के बजाय, यह ओरेकल 11.2 जी में काम करता है:

INSERT INTO customers (last_name, first_name, city)
    SELECT 'Doe', 'John', 'Chicago' FROM dual
    WHERE NOT EXISTS 
        (SELECT '1' from customers 
            where last_name = 'Doe' 
            and first_name = 'John'
            and city = 'Chicago');

शुद्ध बिट तर्क का प्रयोग करें:

DECLARE @Product TABLE (
    id INT PRIMARY KEY IDENTITY NOT NULL
   ,Obsolote CHAR(1)
   ,Instock CHAR(1)
)

INSERT INTO @Product ([Obsolote], [Instock])
    VALUES ('N', 'N'), ('N', 'Y'), ('Y', 'Y'), ('Y', 'N')

;
WITH cte
AS
(
    SELECT
        'CheckIfInstock' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Instock], 'Y'), 1), 'N'), 0) AS BIT)
       ,'CheckIfObsolote' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Obsolote], 'N'), 0), 'Y'), 1) AS BIT)
       ,*
    FROM
        @Product AS p
)
SELECT
    'Salable' = c.[CheckIfInstock] & ~c.[CheckIfObsolote]
   ,*
FROM
    [cte] c

कामकाजी डेमो देखें : अगर एमएसएसक्यूएल में मामले के बिना

प्रारंभ के लिए, आपको चयनित स्थितियों के लिए true और false के मूल्य को काम करने की आवश्यकता है। यहां दो NULLIF :

for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)

एक साथ संयुक्त 1 या 0 देता है। अगला बिटवाई ऑपरेटरों का उपयोग करें।

यह सबसे WYSIWYG विधि है।


CASE कथन SQL में IF के सबसे नज़दीक है और SQL सर्वर के सभी संस्करणों पर समर्थित है

SELECT CAST(
             CASE 
                  WHEN Obsolete = 'N' or InStock = 'Y' 
                     THEN 1 
                  ELSE 0 
             END AS bit) as Saleable, * 
FROM Product

यदि आप एक बूलियन मान के रूप में परिणाम चाहते हैं, तो आपको केवल CAST करने की आवश्यकता है, यदि आप किसी int खुश हैं, तो यह काम करता है:

SELECT CASE 
            WHEN Obsolete = 'N' or InStock = 'Y' 
               THEN 1 
               ELSE 0 
       END as Saleable, * 
FROM Product

CASE स्टेटमेंट अन्य CASE स्टेटमेंट्स में एम्बेड किए जा सकते हैं और यहां तक ​​कि समेकित भी शामिल हैं।

एसक्यूएल सर्वर डेनाली (एसक्यूएल सर्वर 2012) IIF स्टेटमेंट जोड़ता है जो access में भी उपलब्ध है: ( मार्टिन स्मिथ द्वारा इंगित)

SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product

  SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product

 SELECT
   CASE 
      WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' 
      ELSE 'FALSE' 
   END AS Salable,
   * 
FROM PRODUCT

SELECT  
(CASE 
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
                                            ELSE 'NO' 
 END) as Salable
, * 
FROM Product

SELECT 1 AS Saleable, *
  FROM @Product
 WHERE ( Obsolete = 'N' OR InStock = 'Y' )
UNION
SELECT 0 AS Saleable, *
  FROM @Product
 WHERE NOT ( Obsolete = 'N' OR InStock = 'Y' )

SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newref
From profile

case statement some what similar to if in SQL server

SELECT CASE 
            WHEN Obsolete = 'N' or InStock = 'Y' 
               THEN 1 
               ELSE 0 
       END as Saleable, * 
FROM Product




case