मैं SQL IFECT में एक IF… THEN कैसे करूँ?


1508

मैं IF...THENएक SQL SELECTबयान में कैसे प्रदर्शन कर सकता हूं ?

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

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

14
आप इस लिंक पर एक नज़र डालना चाह सकते हैं । के बारे में: SQL WHERE क्लॉज: CASE से बचें, बूलियन लॉजिक का उपयोग करें
कोई व्यक्ति

3
@ शब्द: वास्तव में प्रासंगिक नहीं है क्योंकि लेख एक निहितार्थ को अव्यवस्था में बदलने के लिए तार्किक पुनर्लेखन नियमों का उपयोग करने के बारे में बात करता है। सुराग 'तार्किक' शब्द है, जो कुछ ऐसा है जो सच या गलत का हल करता है, जो प्रक्षेपण पर लागू नहीं होता है। टीएल; डीआर लेख पर लागू होता है WHEREऔर CHECKनहीं SELECT
onedaywhen

6
@ मार्टिनस्मिथ का जवाब सबसे सुरुचिपूर्ण है - SQL 2012+ में IIF का उपयोग करें।
मरे फॉक्सक्रॉफ्ट

जवाबों:


1760

CASEबयान एसक्यूएल में अगर के सबसे करीब है और 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बयानों में एम्बेड किया जा सकता है और यहां तक ​​कि समुच्चय में भी शामिल किया जा सकता है ।

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

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

57
केस का उपयोग करते समय सावधानी का एक अतिरिक्त शब्द आपकी शर्तों को ब्रैकेट में संलग्न नहीं करता है। यह महसूस करने में काफी समय लग गया कि :)
अर्चना मिश्रा


8
और थोड़ा सा!
कैस ब्लोम

8
केस, जब, एल्स एंड एंड को इंडेंट समानांतर (एक ही लाइन के साथ) होना चाहिए - और उसके बाद ही आगे की तरफ इंडेंट किया जाना चाहिए - मेरे लिए सबसे अच्छा काम करता है।
उज्ज्वल सिंह

6
@ReeveStrife केवल iif SQL सर्वर 2012+
स्टुअर्टेनडॉट

327

केस स्टेटमेंट इस स्थिति में आपका मित्र है, और दो रूपों में से एक लेता है:

साधारण मामला:

SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                       WHEN <othervalue> THEN <returnthis>
                                         ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

विस्तारित मामला:

SELECT CASE WHEN <test>      THEN <returnvalue>
            WHEN <othertest> THEN <returnthis>
                             ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

तुम भी वास्तव में फैंसी आदेश के लिए खंड द्वारा एक आदेश में मामले के बयान डाल सकते हैं।


32
मुझे पता है कि यह पुराना है, लेकिन मुझे लगता है कि यह ध्यान दिया जाना चाहिए कि आप परिणामस्वरूप कॉलम के नाम के AS Col_Nameबाद एक जोड़ सकते हैंEND
बेन

9
मुझे हमेशा लगता है कि दूसरा सरल है।
होगन

4
सहमत, मैं लगभग हमेशा विस्तारित केस स्टेटमेंट का उपयोग कर रहा हूं क्योंकि जिन स्थितियों पर मैं परीक्षण करना चाहता हूं वे हमेशा केवल एक चर की तुलना में अधिक जटिल हैं। यह भी मुझे पढ़ना आसान लगता है।
मैग्नम_पी

1
चर के साथ या बिना दोनों स्थितियों की अच्छी व्याख्या। चर के साथ स्थिति को स्टेटमेंट के बाद चर के बीच एक समानता को संतुष्ट करने की आवश्यकता होती है और जिस पर आप अपनी स्थिति को आधार बनाते हैं, चर के बिना आप परीक्षण करने के लिए एक आत्मनिर्भर स्थिति जोड़ सकते हैं।
Remus.A

मैं दूसरे विकल्प के साथ अधिक सुविधाजनक हूं। दोनों समान रूप से ठीक हैं।
स्टैनली ओक्पालालोसा

277

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

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

यह प्रभावी रूप से सिर्फ एक आशुलिपि (यद्यपि मानक एसक्यूएल नहीं) लिखने का तरीका है CASE

जब विस्तारित CASEसंस्करण के साथ तुलना की जाती है तो मैं संक्षिप्तता पसंद करता हूं ।

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

CASE अभिव्यक्ति का उपयोग Transact-SQL स्टेटमेंट, स्टेटमेंट ब्लॉक, उपयोगकर्ता-परिभाषित फ़ंक्शन और संग्रहीत कार्यविधियों के निष्पादन के प्रवाह को नियंत्रित करने के लिए नहीं किया जा सकता है।

यदि आपकी आवश्यकताओं को इन सीमाओं से संतुष्ट नहीं किया जा सकता है (उदाहरण के लिए, किसी शर्त पर निर्भर अलग-अलग आकार के परिणाम सेट को वापस करने की आवश्यकता है) तो 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

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


6
यह उत्तर होना चाहिए यदि आप एक IF चाहते हैं .. तो SQL में कथन।
श्री जे।

91

आप पॉवर ऑफ़ SQL CASE स्टेटमेंट्स में कुछ अच्छे उदाहरण पा सकते हैं , और मुझे लगता है कि आप जिस स्टेटमेंट का उपयोग कर सकते हैं वह कुछ इस तरह से होगा ( 4guysfromrolla से ):

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees

4
एक दिलचस्प चर्चा के लिए देखें: meta.stackexchange.com/questions/103053/… आपके द्वारा प्रदान किए गए दो लिंक अतिरिक्त संदर्भ जोड़ते हैं, जिनका मैं समर्थन करता हूं।
सैम केसर

2
अतिरिक्त विवरण के मामले में यह संदर्भ वास्तव में उपयोगी और अत्यधिक अनुशंसित है
बैमैक्स



48

Microsoft SQL सर्वर (T-SQL)

एक में select, का उपयोग करें:

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

एक whereक्लॉज में, उपयोग करें:

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

1
आप सिर्फ ऐसा क्यों नहीं करेंगे where Obsolete = 'N' or InStock = 'Y'और जहां व्यावहारिक रूप से आधे में कटौती करते हैं
maksymiuk

46

से इस लिंक , हम समझ सकते IF THEN ELSET-SQL में:

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'ALFKI')
  PRINT 'Need to update Customer Record ALFKI'
ELSE
  PRINT 'Need to add Customer Record ALFKI'

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'LARSE')
  PRINT 'Need to update Customer Record LARSE'
ELSE
  PRINT 'Need to add Customer Record LARSE' 

क्या यह टी-एसक्यूएल के लिए पर्याप्त नहीं है?


3
यह वह नहीं है जो आवश्यककर्ता चाहता था, लेकिन यह जानने के लिए बहुत उपयोगी है कि आप चुनिंदा स्टेटमेंट के बाहर स्टेटमेंट का उपयोग कर सकते हैं ।
जोनाथन

2
EXISTS अच्छा है क्योंकि यह आइटम मिलने पर खोज लूप से बाहर निकल जाता है। तालिका पंक्तियों के अंत तक एक COUNT चलता है। सवाल के साथ कुछ नहीं करना है, लेकिन कुछ जानना है।
JustJohn


32

SQL सर्वर में सरल-और स्टेटमेंट:

DECLARE @val INT;
SET @val = 15;

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

GO

नेस्टेड अगर ... SQL सर्वर में और विवरण -

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

2
देर से ही सही लेकिन क्या SELECTओपी ने पूछा कि यह अंदर से प्रयोग करने योग्य है
अब्दुल कय्यूम

25

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

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

1
यह उत्तर दोहराता है (कम विस्तार के साथ) जो मार्टिन स्मिथ ने कई साल पहले जवाब में पहले ही प्रदान किया था।
jk7

1
@ jk7 यह सवाल का पहला जवाब था।
संदीप रावत

3
मैं जो देख रहा हूं उससे नहीं। यह कहता है कि आपका उत्तर अप्रैल 26 '16 और मार्टिन का जुला 20'11 पोस्ट किया गया था।
jk7

24

एक CASE स्टेटमेंट का उपयोग करें:

SELECT CASE
       WHEN (Obsolete = 'N' OR InStock = 'Y')
       THEN 'Y'
       ELSE 'N'
END as Available

etc...

23

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

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

कार्यशील डेमोcase देखें : यदि SQL सर्वर में इसके बिना

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

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

एक साथ संयुक्त 1 या 0. आगे बिटवाइज़ ऑपरेटरों का उपयोग करता है ।

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


19
-1 कोड ऑब्सफिकेशन के लिए। गंभीरता से, यह WYSIWYG से लगभग उतना ही दूर है जितना कि आप प्राप्त कर सकते हैं! अशिष्ट अपठनीय गड़बड़, और अगर मुझे आपके कोड पर काम करना पड़ा, तो मैं दिन भर
कोसता रहूंगा

2
@ देखें दृश्य में cte हिस्सा डालें और आप कभी भी गड़बड़ नहीं देखेंगे। लंबे और जटिल के लिए और, या, इसे CASE की तुलना में अधिक पठनीय नहीं है (पाठ्यक्रम के बाहर का हिस्सा)।
टॉमसिटो

1
मैंने नीट के लिए इसे +1 किया है, एक बार इसे cte में, लेकिन ध्यान दें कि प्रश्न के लिए उत्तर वर्तमान में गलत है। आपको एक '|' एक नहीं '&'।
मार्क हर्ड

3
पूरी तरह से @Heliac से सहमत हैं। हालांकि यह वाक्यात्मक रूप से सही है और ठीक काम करता है यह आसानी से सहायक नहीं है। इसे सीटीई में डालने से अन-पठनीय कोड का वह टुकड़ा कहीं और स्थानांतरित हो जाएगा।
ऑब्जेक्टनॉटफ़ाउंड

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

19
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' )


14
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

2
क्या आप इस बारे में कुछ स्पष्टीकरण दे सकते हैं कि यह पूछे गए प्रश्न का उत्तर कैसे देता है?
गुआंशी

@Guanxi: हालांकि मेरा जवाब नहीं है, एक 'मामला' एक 'अगर-तब-और' (2 मामलों से कई तक) को
सामान्यीकृत

क्या आप विस्तार से समझा सकते हैं?
पीटर मोर्टेंसन

13

यह एक जवाब नहीं है, जहां मैं काम करता हूं, उपयोग के मामले में सिर्फ एक उदाहरण। इसका एक नेस्टेड CASE स्टेटमेंट है। अब तुम्हें पता है कि मेरी आँखें क्यों पार हो गई हैं।

 CASE orweb2.dbo.Inventory.RegulatingAgencyName
    WHEN 'Region 1'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 2'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 3'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'DEPT OF AGRICULTURE'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg
    ELSE (
            CASE orweb2.dbo.CountyStateAgContactInfo.IsContract
                WHEN 1
                    THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty
                ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState
                END
            )
    END AS [County Contact Name]

1
केस स्टेटमेंट्स को रिफॉर्म करने वाला एडिट सभी ठीक और बांका है और इसे अधिक समझ में आता है, लेकिन एसक्यूएल अभी भी उस दृश्य में सभी गांठ लगाएगा जो इसका उपयोग कर रहा है।
जस्टजॉन

1
मैं बस भटक रहा हूं कि क्यों CASEउत्कीर्ण हो गया और एक उत्तर के रूप में चिह्नित किया गया IFजिसके बजाय उत्तर होना चाहिए था, जैसे यह एक है, यह अभी भी एक CASEबयान है, नहीं IF
Mr.J

@ Mr.J: हालांकि मेरा जवाब नहीं है, एक 'मामला' एक 'अगर-तब-और' (2 मामलों से कई तक) को
सामान्यीकृत

12

यदि आप पहली बार एक तालिका से दूसरी तालिका में परिणाम स्थानांतरित करने के बजाय, किसी तालिका में परिणाम सम्मिलित कर रहे हैं, तो यह Oracle 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');

4
टैग्स का कहना है कि SQL सर्वर, TSQL
Malachi

11

CASEबयान के वैकल्पिक समाधान के रूप में , टेबल-संचालित दृष्टिकोण का उपयोग किया जा सकता है:

DECLARE @Product TABLE (ID INT, Obsolete VARCHAR(10), InStock VARCHAR(10))
INSERT INTO @Product VALUES
(1,'N','Y'),
(2,'A','B'),
(3,'N','B'),
(4,'A','Y')

SELECT P.* , ISNULL(Stmt.Saleable,0) Saleable
FROM
    @Product P
    LEFT JOIN
        ( VALUES
            ( 'N', 'Y', 1 )
        ) Stmt (Obsolete, InStock, Saleable)
        ON  P.InStock = Stmt.InStock OR P.Obsolete = Stmt.Obsolete

परिणाम:

ID          Obsolete   InStock    Saleable
----------- ---------- ---------- -----------
1           N          Y          1
2           A          B          0
3           N          B          1
4           A          Y          1

क्वेरी में किस स्थिति में उपयोग योग्य है?
भाविन थुम्मर

यह किस स्थिति में उपयोग किया जा सकता है।
सेरकन अर्सलान

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

6

SQL सर्वर 2012 का उपयोग करने वालों के लिए, IIF एक विशेषता है जिसे जोड़ा गया है और केस स्टेटमेंट के विकल्प के रूप में काम करता है।

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

1
यह उत्तर दोहराता है (कम विस्तार के साथ) जो मार्टिन स्मिथ ने कई साल पहले जवाब में पहले ही प्रदान किया था।
jk7

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

7
हाय सुरजीत सिंह बिष्ट; आपका कोड सही हो सकता है, लेकिन कुछ संदर्भों के साथ यह बेहतर उत्तर देगा; उदाहरण के लिए, आप यह बता सकते हैं कि यह प्रस्तावित परिवर्तन प्रश्नकर्ता की समस्या को कैसे और क्यों हल करेगा, शायद संबंधित दस्तावेज के लिंक सहित। यह उनके लिए अधिक उपयोगी होगा, और अन्य साइट पाठकों के लिए भी अधिक उपयोगी होगा जो समान समस्याओं के समाधान की तलाश में हैं।
विंस बॉउड्रेन

5
यह उत्तर कुछ नया नहीं जोड़ता है। वास्तव में यह सटीक रेखा 5 वर्षों से स्वीकृत उत्तर का हिस्सा है ।
एसएल बार्थ -

1
इसके अलावा यह उल्लेख करना महत्वपूर्ण है कि IIF केवल SQL सर्वर के लिए 2012 से शुरू होता है
इवान रास्कॉन

5

वास्तव में इसे लागू करने के लिए आपके पास दो विकल्प हो सकते हैं:

  1. IIF का उपयोग करना, जो SQL सर्वर 2012 से शुरू किया गया है:

    SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
  2. का उपयोग कर Select Case:

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

4

सवाल:

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

एएनएसआई:

Select 
  case when p.Obsolete = 'N' 
  or p.InStock = 'Y' then 1 else 0 end as Saleable, 
  p.* 
FROM 
  Product p;

उपनामों का उपयोग - pइस मामले में - मुद्दों को रोकने में मदद करेगा।


3

SQL CASE का उपयोग करना बिलकुल सामान्य है अगर / Else स्टेटमेंट्स की तरह। नीचे दिए गए प्रश्न में, यदि अप्रचलित मान = 'N' या यदि InStock मान = 'Y' तो आउटपुट 1 होगा। अन्यथा आउटपुट 0. होगा। फिर हमने उस 0 या 1 मान को Salable कॉलम के तहत रखा।

SELECT
      CASE 
        WHEN obsolete = 'N' OR InStock = 'Y' 
        THEN 1 
        ELSE 0 
      END AS Salable
      , * 
FROM PRODUCT

1
बढ़िया है। शायद शब्द या दो इसे समझाने के लिए?
JQSOFT

यह सामान्य इफ / एल्स स्टेटमेंट की तरह ही है। यदि अप्रचलित मान = 'N' या यदि InStock मान = 'Y' तो आउटपुट 1 होगा। अन्यथा आउटपुट 0. होगा
थारुका

1
धन्यवाद। कृपया इस विवरण को जोड़ने के लिए अपनी पोस्ट को संपादित करें। जैसे: If..Then...Else..बयानों में उपयोग SQLनिम्नानुसार है ....
JQSOFT

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

8
समीक्षा से: ढेर अतिप्रवाह में आपका स्वागत है! कृपया स्रोत कोड के साथ जवाब न दें। आपका समाधान कैसे काम करता है, इसके बारे में एक अच्छा विवरण प्रदान करने का प्रयास करें। देखें: मैं एक अच्छा जवाब कैसे लिखूं? । धन्यवाद
sɐunıɔ ןɐ qɐp

3
मुझे लगता है कि आप इसे निष्पादित नहीं करेंगे, क्योंकि यह 'THEN' कीवर्ड के बाद किसी भी आउटपुट को याद नहीं कर रहा है।
डोडेकाफोन 14

क्या आप विस्तार से समझा सकते हैं?
पीटर मोर्टेंसन

2

यह कुछ इस तरह होगा:

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END AS QuantityText
FROM OrderDetails;

क्या हम क्वेरी में किस स्थिति में QuantityText मान का उपयोग कर सकते हैं? उदाहरण के लिएSELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
भाविन थुम्मर

1

पूर्णता के लिए, मैं जोड़ूंगा कि एसक्यूएल तीन-मूल्यवान तर्क का उपयोग करता है। भाव:

obsolete = 'N' OR instock = 'Y'

तीन अलग-अलग परिणाम दे सकते हैं:

| obsolete | instock | saleable |
|----------|---------|----------|
| Y        | Y       | true     |
| Y        | N       | false    |
| Y        | null    | null     |
| N        | Y       | true     |
| N        | N       | true     |
| N        | null    | true     |
| null     | Y       | true     |
| null     | N       | null     |
| null     | null    | null     |

इसलिए उदाहरण के लिए यदि कोई उत्पाद अप्रचलित है, लेकिन आप नहीं जानते कि यदि उत्पाद इंस्टॉक है तो आप नहीं जानते कि क्या उत्पाद बिक्री योग्य है। आप इस प्रकार के तीन मूल्यवान तर्क लिख सकते हैं:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           WHEN NOT (obsolete = 'N' OR instock = 'Y') THEN 'false'
           ELSE NULL
       END AS saleable

एक बार जब आप यह पता लगा लेते हैं कि यह कैसे काम करता है, तो आप अशक्त व्यवहार को तय करके तीन परिणामों को दो परिणामों में बदल सकते हैं। उदाहरण के लिए, यह इलाज योग्य नहीं होगा:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           ELSE 'false' -- either false or null
       END AS saleable

0

मुझे CASE स्टेटमेंट्स का उपयोग पसंद है लेकिन SQL सेलेक्ट में IF स्टेटमेंट के लिए पूछा गया प्रश्न। मैंने अतीत में जो प्रयोग किया है वह है:

SELECT

   if(GENDER = "M","Male","Female") as Gender

FROM ...

यह एक्सेल या शीट्स की तरह है। यदि कथन में ऐसी कोई शर्त है जहां सही स्थिति और उसके बाद गलत स्थिति है:

if(condition, true, false)

इसके अलावा, यदि आप बयानों को घोंसला दे सकते हैं (लेकिन तब उपयोग का उपयोग करना चाहिए :-)

(नोट: यह MySQLWorkbench में काम करता है लेकिन अन्य प्लेटफार्मों में काम नहीं कर सकता है)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.