নির্বাচনী বিবৃতিতে কেস


141

আমার একটি এসকিউএল স্টেটমেন্ট রয়েছে যা CASEথেকে এসেছে SELECTএবং আমি ঠিক এটি পেতে পারি না। আপনি কি আমাকে CASEকেসগুলি শর্ত এবং উদাহরণগুলি থেকে কেসগুলির ফলাফলের একটি উদাহরণ দেখাতে পারেন । উদাহরণ স্বরূপ:

     Select xxx, yyy
     case : desc case when bbb then 'blackberry';
     when sss then 'samsung';
     end 
     from (select ???? .....

যেখানে ফলাফল প্রদর্শন

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry

আমার উত্তর দুটি কেস ধরণের ব্যাখ্যা করে 1. সাধারণ CASE এক্সপ্রেশন 2. সিএসএসির এক্সপ্রেশন অনুসন্ধান করেছেন। এবং উভয় প্রকারের ক্ষেত্রে ব্যবহারগুলি নির্বাচন করুন, আপডেট করুন, অর্ডারের মাধ্যমে, তদন্তের সাথে রয়েছে।
সোমনাথ মুলুক

উত্তর:


195

এমএসডিএন সিনট্যাক্স এবং ব্যবহার সম্পর্কিত এই ধরণের প্রশ্নের জন্য একটি ভাল রেফারেন্স। এটি লেনদেন এসকিউএল রেফারেন্স - CASE পৃষ্ঠা থেকে।

http://msdn.microsoft.com/en-us/library/ms181765.aspx

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Name, "Price Range" = 
  CASE 
     WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
     WHEN ListPrice < 50 THEN 'Under $50'
     WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
     WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
     ELSE 'Over $1000'
  END
FROM Production.Product
ORDER BY ProductNumber ;
GO

আপনি এসকিউএল সার্ভার ব্যবহার করছেন কিনা তা আপনি যাচাই করতে চাইতে পারেন অন্য একটি ভাল সাইট হ'ল এসকিউএল সার্ভার সেন্ট্রাল । আপনি শিখতে চান এসকিউএল সার্ভারের যে কোনও ক্ষেত্রের জন্য এটিতে বিবিধ সংস্থান রয়েছে।


82

আমি মনে করি এগুলি আপনার পক্ষে সহায়ক হতে পারে।

SELECTএকটি সহজ CASEঅভিব্যক্তি সঙ্গে একটি বিবৃতি ব্যবহার

একটি SELECTবিবৃতিতে, একটি সাধারণ CASEঅভিব্যক্তি কেবলমাত্র একটি সমতা পরীক্ষা করার অনুমতি দেয়; অন্য কোন তুলনা করা হয় না। নিম্নলিখিত উদাহরণটি CASEপণ্য লাইন বিভাগগুলিকে আরও বোধগম্য করার জন্য তাদের পরিবর্তনগুলি পরিবর্তন করতে অভিব্যক্তিটি ব্যবহার করে ।

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

SELECTএকটি অনুসন্ধান করা CASEঅভিব্যক্তি সহ একটি বিবৃতি ব্যবহার করে

একটি SELECTবিবৃতিতে, অনুসন্ধান CASEঅভিব্যক্তি তুলনা মানগুলির উপর ভিত্তি করে ফলাফল সেটে মানগুলি প্রতিস্থাপনের অনুমতি দেয়। নিম্নলিখিত উদাহরণটি পণ্যের দামের সীমার ভিত্তিতে একটি পাঠ্য মন্তব্য হিসাবে তালিকার দাম প্রদর্শন করে।

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Name, "Price Range" = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO

CASEএকটি ORDER BYধারা ব্যবহার করে

প্রদত্ত কলাম মানের উপর ভিত্তি করে সারিগুলির সাজানোর ক্রম নির্ধারণ করতে নিম্নলিখিত উদাহরণগুলি CASEএকটি ORDER BYদফাতে অভিব্যক্তিটি ব্যবহার করে । প্রথম উদাহরণে, হিউম্যান রিসোর্সেসের এমপ্লয়ে সারণীর স্যালারিফ্ল্যাগ কলামে মানটি মূল্যায়ন করা হয়। স্যালারিফ্লেগ 1 এ সেট করা কর্মচারী BusinessEntityID দ্বারা ক্রমবর্ধমান ক্রমে ফিরে আসে। বেতনযুক্তফ্ল্যাগ 0 তে সেট করা কর্মচারী BusinessEntityID দ্বারা ক্রমবর্ধমান ক্রমে ফিরে আসে। দ্বিতীয় উদাহরণে, ফলাফল সেটটি কলাম টেরিটরি নাম অনুসারে অর্ডার করা হয় যখন কলামটি দেশীয় অঞ্চল নামটি 'মার্কিন যুক্তরাষ্ট্র' এর সমান এবং অন্য সমস্ত সারিগুলির জন্য কান্ট্রি রিজিওননেম দ্বারা অর্ডার করা হয়।

SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
        ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO


SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
         ELSE CountryRegionName END;

CASEএকটি UPDATEবিবৃতি ব্যবহার করে

নীচের উদাহরণটি CASEএকটি UPDATEবিবৃতিতে অভিব্যক্তিটি ব্যবহার করে স্যালারিফ্ল্যাগ সহ কর্মীদের জন্য কলামে ভ্যাকেশনআউটস নির্ধারিত হয়েছে তা নির্ধারণ করার জন্য 0 তে নির্ধারণ করা হয়েছে। যখন ভ্যাকেশনহর্স থেকে 10 ঘন্টা বিয়োগ করে তখন নেতিবাচক মান আসে, ভ্যাকেশনহর্স 40 ঘন্টা বৃদ্ধি পায়; অন্যথায়, ছুটির ঘন্টা 20 ঘন্টা বৃদ্ধি করা হয়। OUTPUTদফা আগে ও অবকাশ মান পরে প্রদর্শন করতে ব্যবহৃত হয়।

USE AdventureWorks2012;
GO
UPDATE HumanResources.Employee
SET VacationHours = 
    ( CASE
         WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
         ELSE (VacationHours + 20.00)
       END
    )
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue, 
       Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0; 

CASEএকটি HAVINGধারা ব্যবহার করে

নীচের উদাহরণটি বিবৃতিতে ফিরে আসা সারিগুলিকে সীমাবদ্ধ করতে CASEএকটি HAVINGধারাতে ভাবটি ব্যবহার করে SELECT। বিবৃতিটি হিউম্যান রিসোর্সেস.এম্পলয়ে টেবিলের প্রতিটি কাজের শিরোনামের সর্বাধিক ঘন্টাের হার প্রদান করে। HAVINGদফা যে 42 ডলার চেয়ে সর্বোচ্চ বেতন হার বৃহত্তর 40 টি ডলার বা মহিলাদের তুলনায় সর্বোচ্চ বেতন হার বৃহত্তর সঙ্গে পুরুষদের দ্বারা অনুষ্ঠিত হয় যারা শিরোনাম নিষিদ্ধ।

USE AdventureWorks2012;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (MAX(CASE WHEN Gender = 'M' 
        THEN ph1.Rate 
        ELSE NULL END) > 40.00
     OR MAX(CASE WHEN Gender  = 'F' 
        THEN ph1.Rate  
        ELSE NULL END) > 42.00)
ORDER BY MaximumRate DESC;

এই উদাহরণের আরও বিশদের বিবরণের জন্য উত্সটি দেখুন

এছাড়াও দুর্দান্ত বিবরণ সহ কয়েকটি উদাহরণের জন্য এখানে এবং এখানে যান ।


সত্যিই যেমন একটি বিস্তারিত উত্তর প্রশংসা।
আনেক আজম খান

12

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

SELECT CASE
         WHEN upper(t.name) like 'P%' THEN
          'productive'
         WHEN upper(t.name) like 'T%' THEN
          'test'
         WHEN upper(t.name) like 'D%' THEN
          'development'
         ELSE
          'unknown'
       END as type
FROM table t
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.