বা এসকিউএল সার্ভারে CASE স্টেটমেন্ট সহ সমর্থিত নয়


572

ORমধ্যে অপারেটর WHENএকটি ধারা CASEবিবৃতি সমর্থিত নয়। কিভাবে আমি এটি করতে পারব?

CASE ebv.db_no 
    WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500' 
    ELSE 'WECS 9520' 
END as wecs_system 

: এসকিউএল স্ট্যান্ডার্ড একাধিক মান জন্য করতে পারবেন stackoverflow.com/a/54562580/5070879
Lukasz Szozda

উত্তর:


1079

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

CASE ebv.db_no 
  WHEN 22978 THEN 'WECS 9500' 
  WHEN 23218 THEN 'WECS 9500'  
  WHEN 23219 THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 

অন্যথায়, ব্যবহার করুন:

CASE  
  WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 

9
দ্বিতীয় ক্ষেত্রে, কেন কেবল 'IN' কাজ করে '=' না?
হান

25
=আপনি যদি একক মানের সাথে তুলনা করছিলেন তবে কাজ করবে। যাইহোক, (22978, 23218, 23219)একটি অ্যারে এবং INমানগুলির মধ্যে একটির সাথে মেলে প্রয়োজনীয়।
এলডিট্রিগার

2
এটি সত্যিই দুর্গন্ধযুক্ত- t-sql কেস স্টেটমেন্টে "বা" পরিচালনা করতে পারে না। খেলনা ডাটাবেস স্ট্যাটাস থেকে বড় হওয়ার জন্য মাইক্রোসফ্টের সময় আসুন।
ধনী বিয়ানকো

1
"কেস স্টেটমেন্টে" বা "কে পরিচালনা করতে পারে না" .. হুমম .... আমি মনে করি না ive কখনও কোনও স্যুইচকে কোনও ভাষায় "বা" গ্রহণ করতে দেখেছে। একটি স্যুইচ উদ্দেশ্য হারাতে হবে বলে মনে হচ্ছে। কোন ক্ষেত্রে "বা" কোন ভাষা গ্রহণ করে?
হেরিবার্তো লুগো

2
@ হেরিবার্তো লুগো আপনি কয়টি ভাষা জানেন তা আমি জানি না তবে কমপক্ষে কয়েকটি রয়েছে। ভিবি.এনইটি এবং সি # এগুলি সাধারণ কমা বিচ্ছেদ সহ তাদের ব্যবহার করতে পারে। এটি কোনও কিছুকেই হারাতে পারে না কারণ এটি আপনাকে কোনও কোডের জন্য একাধিক ক্ষেত্রে একই কোডটি পুনরাবৃত্তি করা থেকে রক্ষা করবে।
জনি প্রেসকোট

249
CASE
  WHEN ebv.db_no = 22978 OR 
       ebv.db_no = 23218 OR
       ebv.db_no = 23219
  THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 

38
upvated - এই প্রতিক্রিয়া মান যোগ করে। এটি ওপির প্রশ্নের আরও ঘনিষ্ঠভাবে ফিট করে এবং আপনি যদি কিছু সিএএসই-WHENS বাসাতে চান তবে এই বাক্য গঠনটি প্রয়োজনীয় কোডকে যথেষ্ট পরিমাণে হ্রাস করে।
ম্যাট কেম্প

1
@ উত্তর আমি এই উত্তর প্রশংসা করি এক থ্রেডে সমস্ত ভিন্ন ফর্ম্যাট থাকা ভাল এবং এটি একটি রেফারেন্স হিসাবে আরও ব্যবহারযোগ্য করে তোলে।
জেসন হুইলারের

3
@ বিগুইয়েলস - বাহ .. এই কিছুক্ষণ আগে ছিল। আমি সম্ভবত দ্বিমত পোষণ করেছি কারণ, যুক্তিযুক্তভাবে, এটি অন্যান্য প্রতিক্রিয়াগুলির মতো একই । এটি বলেছিল, আপনি এবং ম্যাট বৈধ পয়েন্টগুলি করেন। যদি প্রশ্নটি ছিল " কেবল ওআর ব্যবহার করে সঠিক বাক্য গঠন কী" তবে এটি একটি উত্তর সরবরাহ করে। তবে, "প্রয়োজনীয় সিনট্যাক্স হ্রাস করা" যদি লক্ষ্য ছিল তবে গৃহীত প্রতিক্রিয়াটি আরও কমপ্যাক্ট। বিটিডাব্লু, ড্যারেনের উত্তরের এটি কোনও স্ল্যাম নয়, যা পুরোপুরি বৈধ। মাত্র আমার $ 0.02 :)
লেইগ করুন

2
INকীওয়ার্ড ব্যবহার করা আরও ভাল উপায়
সাগর নলিয়াপাড়া


53

WHEN এর রয়েছে এমন একটি এক্সপ্রেশন আপনি ব্যবহার করতে পারেন তবে আপনি উভয়টি মিশ্রিত করতে পারবেন না।

  1. যখন কখন_প্রকাশ

    সরল CASE ফর্ম্যাটটি যখন ব্যবহৃত হয় তখন ইনপুট_ এক্সপ্রেসনের সাথে তুলনা করা যায় এমন একটি সহজ অভিব্যক্তি। কখন_প্রকাশটি কোনও বৈধ এক্সপ্রেশন। ইনপুট_প্রকাশের ডেটা ধরণের এবং প্রতিটি_প্রেম অবশ্যই একই হতে হবে বা একটি অন্তর্নিহিত রূপান্তর হতে হবে।

  2. যখন বুলিয়ান_প্রকাশ

    অনুসন্ধানকৃত CASE ফর্ম্যাটটি ব্যবহার করার সময় কি বুলিয়ান এক্সপ্রেশন মূল্যায়ন করা হয়? বুলিয়ান_প্রকাশটি কোনও বৈধ বুলিয়ান এক্সপ্রেশন।

আপনি প্রোগ্রাম করতে পারেন:

1।

    CASE ProductLine
            WHEN 'R' THEN 'Road'
            WHEN 'M' THEN 'Mountain'
            WHEN 'T' THEN 'Touring'
            WHEN 'S' THEN 'Other sale items'
            ELSE 'Not for sale'

2।

    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

তবে যে কোনও ক্ষেত্রে আপনি আশা করতে পারেন যে চলক র‌্যাঙ্কিং একটি বুলিয়ান এক্সপ্রেশনের সাথে তুলনা করতে চলেছে।

দেখুন কেস (লেনদেন এসকিউএল) (দুটিই MSDN)।


37

সম্মানের সাথে ইতিমধ্যে প্রচুর উত্তর রয়েছে CASE। কখন এবং কীভাবে ব্যবহার করব তা আমি ব্যাখ্যা করব CASE

আপনি এসকিউএল কোয়েরিতে যে কোনও জায়গায় CASE এক্সপ্রেশন ব্যবহার করতে পারেন। CASE এক্সপ্রেশনগুলি SELECT স্টেটমেন্ট, WHERE ক্লজ, ক্লজ অনুসারে অর্ডার, হাওজিং ক্লজ, সন্নিবেশ, আপডেট এবং বিবৃতি মুছে ফেলার মধ্যে ব্যবহার করা যেতে পারে।

একটি CASE এক্সপ্রেশন নিম্নলিখিত দুটি ফর্ম্যাট আছে:

  1. সাধারণ CASE এক্সপ্রেশন

    CASE expression
    WHEN expression1 THEN Result1
    WHEN expression2 THEN Result2
    ELSE ResultN
    END
    

    ফলাফলটি খুঁজে পাওয়ার জন্য এটি একটি এক্সপ্রেশনকে সাধারণ এক্সপ্রেশনগুলির সাথে তুলনা করে। এই অভিব্যক্তিটি সমতাটির জন্য প্রতিটি WHEN ধারাতে প্রকাশের সাথে একটি ভাবের তুলনা করে। WHEN দফাটির মধ্যে অভিব্যক্তিটি মিলে গেলে, THEN ধারাটিতে প্রকাশটি ফিরে আসবে।

    এখানেই ওপির প্রশ্ন পড়ছে। 22978 OR 23218 OR 23219এক্সপ্রেশন এর সমান মান যেমন ebv.db_no পাবে না। এ কারণেই এটি একটি ত্রুটি দিচ্ছে। ইনপুট_প্রকাশের ডেটা ধরণের এবং প্রতিটি_প্রেম অবশ্যই একই হতে হবে বা একটি অন্তর্নিহিত রূপান্তর হতে হবে।

  2. CASE এক্সপ্রেশন অনুসন্ধান করা

    CASE
    WHEN Boolean_expression1 THEN Result1
    WHEN Boolean_expression2 THEN Result2
    ELSE ResultN
    END
    

    ফল প্রকাশের জন্য এই অভিব্যক্তিটি বুলিয়ান এক্সপ্রেশনগুলির একটি সেটকে মূল্যায়ন করে। এই এক্সপ্রেশনটি তুলনামূলক অপারেটর এবং লজিকাল অপারেটরগুলিকে এবং / / OR প্রতিটি বুলিয়ান এক্সপ্রেশন দিয়ে মঞ্জুরি দেয়।

1. ক্যাসেট এক্সপ্রেশন সহ বিবৃতি

--Simple CASE expression: 
SELECT FirstName, State=(CASE StateCode
 WHEN 'MP' THEN 'Madhya Pradesh' 
 WHEN 'UP' THEN 'Uttar Pradesh' 
 WHEN 'DL' THEN 'Delhi' 
 ELSE NULL 
 END), PayRate
FROM dbo.Customer

-- Searched CASE expression:
SELECT FirstName,State=(CASE 
 WHEN StateCode = 'MP' THEN 'Madhya Pradesh' 
 WHEN StateCode = 'UP' THEN 'Uttar Pradesh' 
 WHEN StateCode = 'DL' THEN 'Delhi' 
 ELSE NULL 
 END), PayRate
FROM dbo.Customer

২. CASE এক্সপ্রেশন সহ আপডেট স্টেটমেন্ট

-- Simple CASE expression: 
UPDATE Customer 
SET StateCode = CASE StateCode
 WHEN 'MP' THEN 'Madhya Pradesh' 
 WHEN 'UP' THEN 'Uttar Pradesh' 
 WHEN 'DL' THEN 'Delhi' 
 ELSE NULL 
 END 

-- Simple CASE expression: 
UPDATE Customer 
SET StateCode = CASE 
 WHEN StateCode = 'MP' THEN 'Madhya Pradesh' 
 WHEN StateCode = 'UP' THEN 'Uttar Pradesh' 
 WHEN StateCode = 'DL' THEN 'Delhi' 
 ELSE NULL 
 END 

ক্যাসের এক্সপ্রেশন সহ ক্লাউডের মাধ্যমে 3.order

-- Simple CASE expression: 
SELECT * FROM dbo.Customer
ORDER BY 
 CASE Gender WHEN 'M' THEN FirstName END Desc,
 CASE Gender WHEN 'F' THEN LastName END ASC

-- Searched CASE expression: 
SELECT * FROM dbo.Customer
ORDER BY 
 CASE WHEN Gender='M' THEN FirstName END Desc,
 CASE WHEN Gender='F' THEN LastName END ASC

৪. CASE এক্সপ্রেশন সহ ক্লাউজ সংরক্ষণ করা

-- Simple CASE expression: 
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE Gender WHEN 'M' 
 THEN PayRate 
 ELSE NULL END) > 180.00
 OR MAX(CASE Gender WHEN 'F' 
 THEN PayRate 
 ELSE NULL END) > 170.00)

-- Searched CASE expression: 
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE WHEN Gender = 'M' 
 THEN PayRate 
 ELSE NULL END) > 180.00
 OR MAX(CASE WHEN Gender = 'F' 
 THEN PayRate 
 ELSE NULL END) > 170.00)

আশা করি এই ব্যবহারের ঘটনাগুলি ভবিষ্যতে কাউকে সহায়তা করবে।

সূত্র


34

চেষ্টা

CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END

28
SELECT
  Store_Name,
  CASE Store_Name
    WHEN 'Los Angeles' THEN Sales * 2
    WHEN 'San Diego' THEN Sales * 1.5
    ELSE Sales
    END AS "New Sales",
  Txn_Date
FROM Store_Information;

1
কোনও ELSE Salesক্ষেত্র অন্তর্ভুক্তির কারণেই উত্সাহ দেওয়া , যা ব্যবসায়িক অনুসন্ধানের জন্য উপযুক্ত কেস স্টেটমেন্টের মধ্যে অন্তর্ভুক্ত না হলে ডিফল্ট মান প্রদান করে।
ফক্সডেপ্লোয়

3
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender 
from contacts

1
আপনি এখানে কেন কাজ হচ্ছে তা ব্যাখ্যা করবেন না? ব্যাখ্যার সাথে সম্পূর্ণ উত্তর দেওয়া জরুরী কারণ কিছু নবাবিদের এটির কীভাবে সমস্যাটি সমাধান হয় তা বোঝার জন্য
জেরহার্ড বার্নার্ড

3
UPDATE table_name 
  SET column_name=CASE 
WHEN column_name in ('value1', 'value2',.....) 
  THEN 'update_value' 
WHEN column_name in ('value1', 'value2',.....) 
  THEN 'update_value' 
END

table_name = আপনি যে টেবিলটির উপর অপারেশন করতে চান তার নাম।

column_name = আপনি কোন মানটি সেট করতে চান তার কলাম / ক্ষেত্রের নাম।

update_value = আপনি যে মানটি সেট করতে চান তা column_name


11
যদিও এই কোডটি ওপির সমস্যাটি সমাধান করতে পারে, তবে ব্যাখ্যা করার কয়েকটি শব্দ ভবিষ্যতের পাঠকদের জন্য আরও বেশি সহায়ক হবে।
থম

-5
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,
case when s.allow_discount=0 then 'Non Promotional Item' else 'Prmotional 
item' end 'Promotion'
From tbl_stock s inner join tbl_stock_category c on s.stock_id=c.stock_id
inner join tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2 and s.isSerialBased=0 

1
এই উত্তরটি দেখে মনে হচ্ছে প্রশ্নের সাথে এর কোনও যোগসূত্র নেই।
লার্সটেক

4
দয়া করে খালি কোড পোস্ট করবেন না, আপনার কোড কী করছে তার একটি ব্যাখ্যাও সরবরাহ করুন।
জোনাথন মে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.