sql - কিভাবে আমি একটি আইএফএফ সঞ্চালন করতে পারি... তারপর একটি এসকিউএল নির্বাচন করুন?




sql-server tsql (16)

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

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

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

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

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

আপনি যদি প্রথম টেবিলে ফলাফলগুলি সন্নিবেশ করানো হয় তবে ফলাফলগুলি এক টেবিল থেকে অন্যটিতে স্থানান্তর করার পরিবর্তে, ওরাকল 11.2g এ কাজ করে:

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

একটি CASE বিবৃতি ব্যবহার করুন:

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

etc...

একটি নতুন বৈশিষ্ট্য, IIF (যা আমরা সহজেই ব্যবহার করতে পারি), এসকিউএল সার্ভার 2012 এ যোগ করা হয়েছে:

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

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

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

এটি কার্যকরী মাত্র একটি শর্ট্যান্ড (যদিও সিকিউরিটি এসকিউএল নয়) CASE লেখার উপায়।

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

উভয় IIF() এবং CASE একটি 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 

তবে অবশ্যই এই পদ্ধতির সাথে পরামিতি স্নিফিং সমস্যা এড়াতে নেওয়া উচিত।


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

DECLARE @val INT;
SET @val = 15;

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

GO

Nested যদি ... এসকিউএল সার্ভারে অন্য বিবৃতি -

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 <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>

আপনি এমনকি অভিনব আদেশের জন্য বিভাগের দ্বারা একটি আদেশে কেস স্টেটমেন্টগুলিও রাখতে পারেন।


প্রশ্ন ... যদি নির্বাচন করুন (অপ্রচলিত = 'এন' বা InStock = 'Y'? 1: 0) হিসাবে বিক্রয়যোগ্য, * পণ্য থেকে

ANSI: প। ওবসিলিট = 'এন' বা পি। ইনস্টক = 'ওয়াই' এর পরে কেসটি নির্বাচন করুন, তারপর অন্য 1 টি শেষ হিসাবে বিক্রয়যোগ্য, পি। * পড থেকে;

Aliases ব্যবহার করে - এই ক্ষেত্রে পি - সমস্যা প্রতিরোধ করতে সাহায্য করবে।


ব্যবহারের ক্ষেত্রে. এটার মতো কিছু.

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

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

একটি নির্বাচিত ব্যবহারে:

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

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 বিবৃতি এম্বেড করা যাবে এবং এমনকি সংখ্যার মধ্যে অন্তর্ভুক্ত করা যেতে পারে।

এসকিউএল সার্ভার Denali (SQL সার্ভার 2012) IIF বিবৃতি যোগ করে যা access উপলব্ধ: ( মার্টিন স্মিথ দ্বারা নির্দেশিত)

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

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

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

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

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




case