এসকিউএল সার্ভার ২০০৮ ব্যবহার করার পরে আমি কীভাবে একাধিক কেস করব?


173

আমি যা করার চেষ্টা করছি তা হ'ল একই কলামের জন্য একাধিক CASE শর্ত ব্যবহার করা।

কোয়েরির জন্য আমার কোডটি এখানে:

   SELECT   Url='',
            p.ArtNo,
            p.[Description],
            p.Specification,
            CASE 
            WHEN 1 = 1 or 1 = 1 
               THEN 1 
               ELSE 0 
            END as Qty,
            p.NetPrice,
            [Status] = 0
      FROM  Product p (NOLOCK)

তবে, আমি যা করতে চাই তা হ'ল WHEN একই কলাম "কিউটি" এর জন্য আরও একবার ব্যবহার করা।

নিম্নলিখিত কোড হিসাবে:

IF
// CODE
ELSE IF
// CODE
ELSE IF
// CODE
ELSE
// CODE

8
এমন কিছু আছে যা case when <condition> then <vaue> when <condition> then <value> . . . endকাজ করছে না?
গর্ডন লিনফ

1
@GordonLinoff বলছিলেন হিসাবে, আপনি একাধিক থাকতে পারে WHEN
কেরিমিট

ঠিক যেমনটি আপনি বলেছেন ঠিক তেমনই। আমি ভুল জায়গায় একটি প্রথম বন্ধনী রেখেছিলাম। দুক্ষিত বন্ধুরা!
নীলস অ্যান্ডার্স

উত্তর:


389

কেস এক্সপ্রেশন দুটি ফর্ম্যাট আছে । আপনি CASEঅনেকের সাথে করতে পারেন WHEN;

CASE  WHEN Col1 = 1 OR Col3 = 1  THEN 1 
      WHEN Col1 = 2 THEN 2
      ...
      ELSE 0 END as Qty

অথবা একটি সাধারণ CASEঅভিব্যক্তি

CASE Col1 WHEN 1 THEN 11 WHEN 2 THEN 21 ELSE 13 END

বা হিসাবে CASE মধ্যে CASE ;

CASE  WHEN Col1 < 2 THEN  
                    CASE Col2 WHEN 'X' THEN 10 ELSE 11 END
      WHEN Col1 = 2 THEN 2
      ...
      ELSE 0 END as Qty

30
দুই আছে. তিনটির তালিকা : D
d8aninja

যদি আউটটার কেসটি সত্য না হয় তবে অভ্যন্তরীণ কেসটি কী বৈধ হয়ে উঠছে?
ggderas

3
@ d8aninja তারা কেবল ২ টি তালিকাভুক্ত করেছে The তৃতীয়টি প্রথম দুটিটির সংমিশ্রণ, বাইরের কেসটি প্রথম ধরণের এবং অভ্যন্তরীণ কেসটি দ্বিতীয় ধরণের।

12

কেবল এটি ব্যবহার করুন, তারা যখন ক্লাস হয় তখন আপনাকে আরও ব্যবহার করতে হবে।

SELECT   Url='',
         p.ArtNo,
         p.[Description],
         p.Specification,
         CASE 
         WHEN 1 = 1 or 1 = 1 
            THEN 1 
         WHEN 2 = 2
             THEN 2
         WHEN 3 = 3
              THEN 3
          ELSE 0 
        END as Qty,
        p.NetPrice,
        [Status] = 0
  FROM  Product p (NOLOCK)

3

একাধিক শর্তের সাথে আপনি নীচের ক্ষেত্রে উদাহরণ ব্যবহার করতে পারেন।

SELECT
  id,stud_name,
  CASE
    WHEN marks <= 40 THEN 'Bad'
    WHEN (marks >= 40 AND
      marks <= 100) THEN 'good'
    ELSE 'best'
  END AS Grade
FROM Result

2

এটি একটি বিবৃতিতে বিভিন্ন পরীক্ষা করার কার্যকর উপায় হতে পারে

select
case colour_txt 
  when 'red' then 5 
  when 'green' then 4 
  when 'orange' then 3
else 0 
end as Pass_Flag

এটি কেবল সমতার তুলনায় কাজ করে!


1
    case when first_condition
      then first_condition_result_true
    else
      case when second_condition 
        then second_condition_result_true
      else
          second_condition_result_false                              
      end
    end
  end as qty

5
এর মতো ক্যাস এক্সপ্রেশন বাসা বাঁধার দরকার নেই, আপনার একক সিএসইতে একাধিক WHEN ধারা থাকতে পারে।
বারমার

2
প্রথম শর্তটি পূরণ হলে, বাকি শর্তগুলি উপেক্ষা করা হয়?
সূর্যের

1
case 
    when a.REASONID in ('02','03','04','05','06') then
        case b.CALSOC 
            when '1' then 'yes' 
            when '2' then 'no' 
            else 'no' 
        end
    else 'no' 
end 

1
দয়া করে আপনার উত্তরটি ফর্ম্যাট করুন এবং সম্ভবত কিছু ব্যাখ্যা যুক্ত করুন।
tmt

0

আমার একটি অনুরূপ ছিল তবে এটি তারিখগুলি নিয়ে কাজ করছিল। গত মাসের জন্য সমস্ত আইটেম দেখানোর জন্য অনুসন্ধান, জানুয়ারী পর্যন্ত শর্ত ছাড়াই দুর্দান্ত কাজ করে it

declare @yr int
declare @mth int

set @yr=(select case when month(getdate())=1 then YEAR(getdate())-1 else YEAR(getdate())end)
set @mth=(select case when month(getdate())=1 then month(getdate())+11 else month(getdate())end)

এখন আমি কেবল পরিবর্তনশীলটিকে শর্তে যুক্ত করছি: ...

(year(CreationTime)=@yr and MONTH(creationtime)=@mth)

0

সমস্ত শর্ত একত্রিত

select  a.* from tbl_Company a

where  a.Company_ID NOT IN (1,2)  

AND (   
        (0 = 
            CASE WHEN (@Fromdate = '' or @Todate='')
                THEN 0 
                ELSE 1  
            END
        )      -- if 0=0 true , if 0=1 fails (filter only when the fromdate and todate is present)
                OR
        (a.Created_Date between @Fromdate and @Todate )                 
    )

0

এর মতো কিছু, দুটি শর্ত দুটি কলাম

SELECT ITEMSREQ.ITEM AS ITEM,
       ITEMSREQ.CANTIDAD AS CANTIDAD,
       (CASE  WHEN ITEMSREQ.ITEMAPROBADO=1 THEN 'APROBADO'
              WHEN ITEMSREQ.ITEMAPROBADO=0 THEN 'NO APROBADO'
        END) AS ITEMS,
        (CASE 
              WHEN ITEMSREQ.ITEMAPROBADO = 0 
              THEN CASE WHEN REQUISICIONES.RECIBIDA IS NULL  THEN 'ITEM NO APROBADO PARA ENTREGA' END
              WHEN ITEMSREQ.ITEMAPROBADO = 1 
              THEN CASE WHEN REQUISICIONES.RECIBIDA IS NULL THEN 'ITEM AUN NO RECIBIDO' 
                        WHEN REQUISICIONES.RECIBIDA=1 THEN 'RECIBIDO' 
                        WHEN REQUISICIONES.RECIBIDA=0 THEN 'NO RECIBIDO' 
                       END
              END)
              AS RECIBIDA
 FROM ITEMSREQ
      INNER JOIN REQUISICIONES ON
      ITEMSREQ.CNSREQ = REQUISICIONES.CNSREQ

0

Whenএকক ক্ষেত্রে এর মতো আচরণ করার জন্য আপনার একাধিক প্রয়োজনif.. Elseif else..

   Case when 1=1       //if
   Then
    When 1=1              //else if
     Then.... 
    When .....              //else if
    Then 
    Else                      //else
   ....... 
     End
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.