'নির্বাচন' বিবৃতিতে 'যদি' - কলাম মানগুলির উপর ভিত্তি করে আউটপুট মান চয়ন করুন


685
SELECT id, amount FROM report

আমি প্রয়োজন amountহতে amountযদি report.type='P'এবং -amountযদি report.type='N'। আমি কীভাবে উপরের ক্যোয়ারিতে এটি যুক্ত করব?

উত্তর:


1025
SELECT id, 
       IF(type = 'P', amount, amount * -1) as amount
FROM report

Http://dev.mysql.com/doc/refman/5.0/en/control-flow-function.html দেখুন ।

অতিরিক্তভাবে, শর্তটি শূন্য হলে আপনি পরিচালনা করতে পারবেন। নালার পরিমাণের ক্ষেত্রে:

SELECT id, 
       IF(type = 'P', IFNULL(amount,0), IFNULL(amount,0) * -1) as amount
FROM report

অংশটির IFNULL(amount,0)অর্থ যখন পরিমাণ বাতিল হয় না তখন অন্য পরিমাণ 0 ফেরত দেয়


5
আমি ভাবছি যদি এখানে আইএলএনএসএল এর পরিবর্তে এই আইফনুল ব্যবহার করার কোনও সুবিধা আছে কিনা?
ক্রিস

4
মাইএসকিএল উত্স থেকে, আমি কোলেসেসের 2 সংজ্ঞা লক্ষ্য করেছি, একটি 2 টি যুক্তিযুক্ত এবং অন্যটি যুক্তিগুলির তালিকা সহ, তবে ইফ্নুল কোলেসকে 2 টি পরামিতি সহ আহ্বান করেsql/item_cmpfunc.h 722: Item_func_ifnull(Item *a, Item *b) :Item_func_coalesce(a,b) {}
ফিলিপ বুকিওনি

2
উত্তরটি সঠিক নয় যদি 'এন' এবং 'পি' এর চেয়ে পৃথক প্রতিবেদনের ধরণ থাকে তবে আরও ভাল "কেস স্টেটমেন্ট" সমাধানে ব্যাডহর্সির মন্তব্য দেখুন।
ট্রাইভভে

3
@ ট্রাইগভে প্রশ্নটি ২ টি শর্তের জন্য, এবং একটি IFবিবৃতি খুঁজছেন , কী দোষ হয়েছে?
ফিলিপ বুকিওনি

2
@ ফিলিপ, উত্তরটি অগত্যা 100% সঠিক নয়, এন এবং পি ব্যতিরেকে অন্যান্য প্রতিবেদনের ধরণ থাকতে পারে your যদিও অন্যান্য প্রতিবেদনের ধরণ থাকলেও প্রশ্নটি উল্লেখ করতে ব্যর্থ হয়, তাই আমি আমার ডাউনভোটটি সরিয়ে ফেলি। আমি কেবল এই ক্ষেত্রেগুলি ডিফেন্সিয়ালি প্রোগ্রাম করতে চাই, তাই অন্য পাঠকদের জন্য একটি শীর্ষস্থানীয়।
ট্রিগভে

255

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

select id,
    case report.type
        when 'P' then amount
        when 'N' then -amount
    end as amount
from
    `report`

5
@ ইভান: সত্য। আমি এগুলিকে স্পষ্টতার জন্য ব্যবহার করি। এটি যে কোনওভাবেই প্রভাবিত করে না।
মেল্লামব্যাক

3
আমি একটি নির্দিষ্ট ডাটাবেসের জন্য কাস্টম সিনট্যাক্সের চেয়ে এএনএসআই স্ট্যান্ডার্ড সিনট্যাক্স পছন্দ করি।
গর্ডন লিনফ 18

2
এটিই সেরা সমাধান কারণ রিপোর্ট. টাইপের জন্য অন্য মান রয়েছে বা কোনও নতুন রিপোর্ট. টাইপ পরবর্তী তারিখে প্রবর্তিত হলে গ্রহণযোগ্য উত্তর সমাধানটি যথাযথ নয়। এটা বলছে if report.type = 'P' use amount, otherwise use -amount for anything else। এটি 'পি' না হলে এটি ধরণের বিবেচনা করবে না।
BadHorsie

97
SELECT CompanyName, 
    CASE WHEN Country IN ('USA', 'Canada') THEN 'North America'
         WHEN Country = 'Brazil' THEN 'South America'
         ELSE 'Europe' END AS Continent
FROM Suppliers
ORDER BY CompanyName;


15

সর্বাধিক সহজ উপায় হ'ল আইএফ () ব্যবহার করা । হ্যাঁ মাইএসকিএল আপনাকে শর্তযুক্ত যুক্তি করতে দেয়। যদি ফাংশনটি 3 টি প্যারাম গ্রহণ করে শর্ত, সত্যই, মিথ্যা আউটকোমে।

সুতরাং লজিক হয়

if report.type = 'p' 
    amount = amount 
else 
    amount = -1*amount 

এসকিউএল

SELECT 
    id, IF(report.type = 'P', abs(amount), -1*abs(amount)) as amount
FROM  report

সমস্ত কিছু যদি কেবলমাত্র + থাকে তবে আপনি অ্যাবস () এড়িয়ে যেতে পারেন


12
SELECT id, amount
FROM report
WHERE type='P'

UNION

SELECT id, (amount * -1) AS amount
FROM report
WHERE type = 'N'

ORDER BY id;

ফলাফলের সেটগুলি পারস্পরিক একচেটিয়া হওয়ায় আমি এখানে ইউনিয়ন সব পছন্দ করি।
আর্থ

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