আমি কীভাবে আইএফ সম্পাদন করব ... তারপরে কোনও এসকিউএল নির্বাচন করুন?


1508

আমি কীভাবে IF...THENএকটি SQL SELECTবিবৃতিতে একটি সম্পাদন করব ?

উদাহরণ স্বরূপ:

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

14
আপনি এই লিঙ্কটি একবার দেখতে চাইবেন । সম্পর্কিত: এসকিউএল যেখানে ক্লজ: CASE এড়ান, বুলিয়ান যুক্তি ব্যবহার করুন
কেউ 21

3
@ সোমিবিডি: সত্যই প্রাসঙ্গিক নয় কারণ নিবন্ধটি কোনও জড়িতিকে একটি বিভ্রান্তিতে রূপান্তরিত করার জন্য লজিকাল পুনর্লিখনের নিয়মগুলি ব্যবহার করার বিষয়ে কথা বলে। ক্লুটি হ'ল লজিকাল 'অর্থাত্ এমন কিছু যা সত্য বা মিথ্যা সমাধান করে যা প্রক্ষেপণের জন্য প্রযোজ্য নয়। টি এল; ডিআর নিবন্ধটি জন্য প্রযোজ্য WHEREএবং CHECKকিন্তু SELECT
onedaywhen

6
@ মার্টিনস্মিথের উত্তরটি সর্বাধিক মার্জিত - এসকিউএল 2012+ এ আইআইএফ ব্যবহার করুন।
মারে ফক্সক্রফ্ট

উত্তর:


1760

CASEবিবৃতি SQL এর যে যদি নিকটস্থ হয় এবং 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) যোগ করে আইআইএফ স্টেটমেন্ট যুক্ত করে যা অ্যাক্সেসেও উপলব্ধ ( মার্টিন স্মিথ নির্দেশিত ):

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

57
কেসটি ব্যবহার করার সময় কেবলমাত্র একটি অতিরিক্ত সতর্কতার শব্দ আপনার শর্তগুলি ব্রাকেটে আবদ্ধ করবেন না। বুঝতে পেরে বেশ খানিকটা সময়
নিলেন

17
এবং
শেষটি

8
এবং AS বিট!
ক্যাস ব্লিম

8
কেস, যখন, অন্যথায় এবং সমাপ্তিকে সমান্তরালভাবে একই পংক্তিতে যুক্ত করা উচিত (একই লাইন বরাবর) - এবং কেবল তখনই আরও অভ্যন্তরের দিকে ইন্টেন্ট করা উচিত - আমার পক্ষে সবচেয়ে ভাল কাজ করে।
উজ্জ্বল সিং 21

6
@ রিভারিস্ট্রিফ কেবলমাত্র এসআইকিউএল সার্ভার ২০১২++
স্টুয়ার্টডনেট

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
পরিবর্তনশীল সহ বা ছাড়াই উভয় পরিস্থিতিতেই ভাল ব্যাখ্যা Good ভেরিয়েবলের সাথে শর্তটির ক্ষেত্রে কেস স্টেটমেন্টের পরে পরিবর্তনশীল এবং আপনি যেটি নিজের শর্তটি ভিত্তি করে তার মধ্যে একটি সমতা সন্তুষ্ট করা দরকার, পরিবর্তনশীল ছাড়াই আপনি পরীক্ষার জন্য একটি স্বনির্ভর শর্ত যুক্ত করতে পারেন।
রিমাস.এ

আমি দ্বিতীয় বিকল্প সঙ্গে আরও সুবিধাজনক। দু'জনও সমান ঠিকঠাক।
স্ট্যানলে ওকপালা নওসা

277

এসকিউএল সার্ভার থেকে 2012 আপনি IIFএটির জন্য ফাংশনটি ব্যবহার করতে পারেন ।

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

এই কার্যকরভাবে শুধু একটি সাঁটে লেখার (না আদর্শ SQL যদিও) লেখার উপায় CASE

প্রসারিত CASEসংস্করণের সাথে তুলনা করার সময় আমি সংক্ষিপ্ততা পছন্দ করি ।

উভয়ই IIF()এবং CASEকোনও এসকিউএল স্টেটমেন্টের মধ্যেই এক্সপ্রেশন হিসাবে সমাধান করুন এবং কেবলমাত্র সংজ্ঞায়িত জায়গাগুলিতেই ব্যবহার করা যেতে পারে।

ট্রানজ্যাক্ট-এসকিউএল স্টেটমেন্টস, স্টেটমেন্ট ব্লক, ব্যবহারকারীর সংজ্ঞায়িত ফাংশন এবং সঞ্চিত পদ্ধতিগুলির কার্য সম্পাদনের প্রবাহ নিয়ন্ত্রণ করতে CASE এক্সপ্রেশন ব্যবহার করা যাবে না।

যদি আপনার প্রয়োজনীয়তা এই সীমাবদ্ধতা দ্বারা সন্তুষ্ট না করা যায় (উদাহরণস্বরূপ, কিছু শর্তের উপর নির্ভর করে ভিন্ন আকারের ফলাফলের সেটগুলি ফেরত নেওয়া দরকার) তবে এসকিউএল সার্ভারের একটি পদ্ধতিগত 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
আপনি যদি আইএফ চান তবে এটির উত্তরটি হওয়া উচিত .. তারপর এসকিউএল-তে বিবৃতি।
মিঃজে

91

এসকিউএল CASE বিবৃতিগুলির পাওয়ারে আপনি কয়েকটি দুর্দান্ত উদাহরণ খুঁজে পেতে পারেন এবং আমি মনে করি আপনি যে বিবৃতিটি ব্যবহার করতে পারেন তা এই জাতীয় কিছু হবে ( 4guysfromrolla থেকে ):

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

4
একটি আকর্ষণীয় আলোচনার জন্য দেখুন: মেটা.স্ট্যাকেক্সেঞ্জার / প্রশ্নস 103053 / …… আপনার দেওয়া দুটি লিঙ্ক আমি অতিরিক্ত প্রসঙ্গ যুক্ত করি, যা আমি সমর্থন করি।
স্যাম জাফরন

2
অতিরিক্ত বিবরণ ক্ষেত্রে রেফারেন্সটি সত্যই দরকারী এবং অত্যন্ত প্রস্তাবিত
বায়াম্যাক্স



47

মাইক্রোসফ্ট এসকিউএল সার্ভার (টি-এসকিউএল)

একটিতে 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 ELSEটি-এসকিউএল বুঝতে পারি :

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
অস্তিত্বগুলি ভাল কারণ আইটেমটি পাওয়া গেলে এটি অনুসন্ধান লুপ থেকে সরিয়ে দেয়। একটি COUNT টেবিল সারিগুলির শেষ অবধি চলে। প্রশ্ন নিয়ে কিছুই করার নেই, তবে কিছু জানার মতো।
জাস্টজহান


32

এসকিউএল সার্ভারে সহজ-অন্য বিবৃতি:

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

2
দেরীতে কিন্তু SELECTওপি যেমন জিজ্ঞাসা করেছে তা কি ভিতরে ব্যবহারযোগ্য ?
আবদুল কাইয়ুম

25

এসকিউএল সার্ভার ২০১২- এ একটি নতুন বৈশিষ্ট্য, আইআইএফ (যা আমরা সহজভাবে ব্যবহার করতে পারি) যুক্ত করা হয়েছিল:

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

1
এই উত্তরটি কয়েক বছর আগে মার্টিন স্মিথের উত্তরে ইতিমধ্যে কী সরবরাহ করা হয়েছিল তার পুনরাবৃত্তি করে (কম বিশদ সহ) ।
jk7

1
@ জে কে এটি প্রশ্নের প্রথম উত্তর ছিল।
সন্দীপ কাঁচাট

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 দেখুন : যদি এসকিউএল সার্ভার না করে থাকে

শুরু করার জন্য, আপনাকে নির্বাচিত শর্তগুলির মান trueএবং তার বাইরে কাজ করতে হবে false। এখানে দুটি নূলিফ আসে :

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

একসাথে এক বা 1 দেয় 0 পরবর্তী ব্যবহার বিটওয়াইস অপারেটর

এটি সর্বাধিক WYSIWYG পদ্ধতি।


19
কোড অবলম্বনের জন্য -1। গুরুতরভাবে, এটি WYSIWYG থেকে যতটা সম্ভব আপনি পেতে পারেন! একটি অশ্লীল অপঠনযোগ্য জগাখিচুড়ি, এবং যদি আপনার
কোডটিতে

2
@ হেলিয়াক ভিউতে সিটি অংশ রেখেছিল এবং আপনি কখনই এই জগাখিচুড়ি দেখতে পাবেন না। দীর্ঘ এবং জটিল এবং, এবং এর জন্য, এটি CASE (পাঠ্যক্রমের বাইরের অংশ) এর চেয়ে বেশি পঠনযোগ্য নয়।
টমাসিটো

1
পরিচ্ছন্নতার জন্য আমি এটিটিকে একটি +1 দিয়েছি, এটি একবার সিটি হয়ে গেলে, তবে মনে রাখবেন যে উত্তরটি বর্তমানে প্রশ্নের জন্য ভুল। আপনার একটি '|' দরকার একটা না '&'.
মার্ক হার্ট

3
সম্পূর্ণরূপে @ হেলিয়াকের সাথে একমত এটি সিন্টেক্সিকভাবে সঠিক এবং সূক্ষ্মভাবে কাজ করার সময় এটি কেবল সহজে সমর্থনযোগ্য নয়। এটি একটি সিটিইতে রাখলে কেবল অপঠনযোগ্য কোডের এই অংশটি অন্য কোথাও স্থানান্তরিত হবে।
অবজেক্ট নটফাউন্ড

1
সংমিশ্রণ পরীক্ষা করার টেবিল পদ্ধতিতে এর সুবিধা থাকতে পারে। একটি সারণী ভেরিয়েবল ব্যবহার এবং বিদ্যমান ক্যোয়ারিতে এটিতে যুক্ত হওয়া কোনও ক্ষেত্রে ছাড়াই সেট-ভিত্তিক সমাধান সরবরাহ করতে পারে। এই উত্তরটি একটি দরিদ্র উদাহরণ, তবে টেবিল ধারণাটি নিজেই যোগ্যতা অর্জন করে।
সানকাট 2000

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
আপনি দয়া করে এই প্রশ্নটির উত্তর কীভাবে জিজ্ঞাসা করেছেন তার কিছু ব্যাখ্যা দিতে পারেন?
গুয়ানসি

@ গুয়ানসি: যদিও আমার উত্তর না হলেও একটি 'কেস' একটি 'যদি-তবে-অন্যথায়' (2 কেস থেকে অনেকের ক্ষেত্রে)
জেনারেলাইজ করে

তুমি কি বিস্তারিত বলতে পারো?
পিটার মর্টেনসেন

13

এটি কোনও উত্তর নয়, আমি যেখানে কাজ করি সেখানে ব্যবহারের ক্ষেত্রে CASE স্টেটমেন্টের উদাহরণ। এটিতে নেস্টেড 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
আমি শুধু কেন বিচরণ করছি CASEupvoted এবং পরিবর্তে একটি উত্তর হিসাবে চিহ্নিত হয়ে IFযা উত্তর হওয়া উচিত ছিল, এই এক মত, এই এখনও একটি হল CASEবিবৃতি, কোনো IF
মিঃ জে

@ মিঃ জে: যদিও আমার উত্তর না হলেও একটি 'কেস' একটি 'যদি-তবে-অন্য' (সাধারণভাবে 2 কেস থেকে বহু ক্ষেত্রে)
জেনারেলাইজ করে

12

যদি আপনি প্রথমবারের জন্য কোনও টেবিলে ফলাফল অন্য টেবিলের কাছে স্থানান্তরিত না করে ফলাফলগুলি প্রথমবারের জন্য সন্নিবেশ করান তবে এটি ওরাকল 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
ট্যাগগুলি এসকিউএল সার্ভার, টিএসকিউএল
মালাচি

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

যারা এসকিউএল সার্ভার 2012 ব্যবহার করেন তাদের জন্য, আইআইএফ একটি বৈশিষ্ট্য যা যুক্ত করা হয়েছে এবং কেস স্টেটমেন্টের বিকল্প হিসাবে কাজ করে।

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 কেবলমাত্র এসকিউএল সার্ভারের সাথে 2012 থেকে শুরু হয়ে প্রযোজ্য
ইভান রাসকন

5

বাস্তবে বাস্তবায়নের জন্য আপনার কাছে দুটি পছন্দ থাকতে পারে:

  1. আইআইএফ ব্যবহার করে, যা এসকিউএল সার্ভার ২০১২ থেকে প্রবর্তিত হয়েছে:

    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

ANSI:

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

এলিয়াস ব্যবহার - pএই ক্ষেত্রে - সমস্যাগুলি রোধ করতে সহায়তা করবে।


3

এসকিউএল CASE ব্যবহার করা ঠিক সাধারণ / অন্য বিবৃতিগুলির মতো। নীচের ক্যোয়ারিতে, যদি অপ্রচলিত মান = 'এন' বা যদি ইনস্টক মান = 'ওয়াই' থাকে তবে আউটপুটটি 1 হবে Otherwise অন্যথায় আউটপুট 0 হবে Then তারপরে আমরা 0 বা 1 মানটি বিক্রয়যোগ্য কলামের আওতায় রাখি।

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

1
ভাল লাগছে। দু'একটা কথা বুঝিয়ে বললে?
জেকিউসফট

এটি ঠিক যদি সাধারণ / অন্য বিবৃতিগুলির মতো হয়। অপ্রচলিত মান = 'এন' বা এমন InStock মান যদি = 'ওয়াই তারপর আউটপুট হতে হবে 1. অন্যথায় আউটপুট 0. হতে হবে
Tharuka

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
পর্যালোচনা থেকে: স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম! দয়া করে কেবল উত্স কোড দিয়ে উত্তর দিবেন না। আপনার সমাধান কীভাবে কাজ করে সে সম্পর্কে একটি দুর্দান্ত বর্ণনা দেওয়ার চেষ্টা করুন। দেখুন: আমি কীভাবে ভাল উত্তর লিখব? । ধন্যবাদ
সানুন ןɐ কিউপি

3
আমি মনে করি আপনি এটি কার্যকর করবেন না কারণ এটি 'THEN' কীওয়ার্ড অনুসরণ করে কোনও আউটপুট অনুপস্থিত।
ডডিকাফোন

তুমি কি বিস্তারিত বলতে পারো?
পিটার মর্টেনসেন

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;

আমরা কোয়েরিতে কোয়ানটিটিেক্সট মানটি ব্যবহার করতে পারি? উদাহরণস্বরূপ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 বিবৃতি ব্যবহার করতে পছন্দ করি তবে প্রশ্নটি এসকিউএল সিলেক্টে আইএফ-এর বিবৃতি চেয়েছিল। আমি অতীতে যা ব্যবহার করেছি তা হ'ল:

SELECT

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

FROM ...

এটি যদি এক্সেল বা শিটস এর বিবৃতিগুলির মত হয় যেখানে শর্ত থাকে সত্য শর্ত এবং তারপরে মিথ্যা শর্ত অনুসরণ করে:

if(condition, true, false)

তদ্ব্যতীত, আপনি যদি নীড় নীড় করতে পারেন (তবে তারপরে ব্যবহারের একটি CASE ব্যবহার করা উচিত :-)

(দ্রষ্টব্য: এটি মাইএসকিউএল ওয়ার্কবেঞ্চে কাজ করে তবে অন্য প্ল্যাটফর্মগুলিতে কাজ নাও করতে পারে)


0

আপনি কেস স্টেটমেন্ট ব্যবহার করতে পারেন:

Select 
Case WHEN (Obsolete = 'N' or InStock = 'Y') THEN 1 ELSE 0 END Saleable,
Product.*
from Product
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.