Keling, ikkinchi CASE shaklini olaylik:
Aytaylik, yangi yil uchun ular barcha xodimlarni mukofotlashga qaror qilishdi va bonuslar miqdorini quyidagi sxema bo'yicha hisoblashni so'rashdi:
IT bo'limi xodimlariga ish haqining 15 foizini berish;
Buxgalteriya bo'limi xodimlari ish haqining 10 foizi;
Qolganlarning hammasi ish haqining 5%.
Bu vazifa uchun biz CASE ifodasi bilan so'rovdan foydalanamiz:
ID, ism, ish haqi, Departament identifikatorini tanlang - aniqlik uchun biz foizni CASE DepartmentID qatorida ko'rsatamiz - tasdiqlangan qiymat 2dan keyin "10%" - buxgalterlarga beriladigan ish haqining 10 foizi 3 dan keyin 15% " - IT xodimlariga berish uchun ish haqining 15 foizi" Qolgan 5% " - qolganlarga 5% Yangi YILBonusPercent tugaydi, - bonus miqdorini ko'rish uchun CASE yordamida ifoda tuzamiz. Ish haqining 10 - 10 foizi buxgalterlarga Qachon 3 dan 15 - 15% maoshning 15% i IT xodimlariga beriladi Qolgan 5 - hamma 5% har bir xodimga bonusni tugatadi.
Bu WHID qiymatlari bo'yicha DepartmentID qiymatini ketma -ket tekshiradi. Birinchi DepartmentID WHEN qiymatiga teng bo'lganda, chek bekor qilinadi va THEN so'zidan keyin ko'rsatilgan qiymat qaytariladi.
Shunga ko'ra, agar IDID WHEN qiymatiga mos kelmasa, ELSE blokining qiymati qaytariladi.
Agar ELSE bloki bo'lmasa, IDID WHEN qiymatiga mos kelmasa, NULL qaytariladi.
Ikkinchi CASE formasini birinchi shakl yordamida ko'rsatish oson:
ID, 2, "10%" - buxgalterlarga beriladigan ish haqining 10 foizi, idorasi = 3, keyin "15%" - IT xodimlariga beriladigan ish haqining 15 foizi. 5% " - qolganlarning hammasi 5% ENDi Yangi YilBonusPercent, - bonus miqdorini ko'rish uchun CASE yordamida iborani yarating Ish haqi / 100 * VAQTIDA idorasi = 2 O'NA 10 - 10% buxgalterlarga berilishi kerak bo'lgan bo'limIDID = 3 15 15 - IT xodimlariga beriladigan maoshning 15 foizi, boshqa 5 - hamma 5% har bir xodimga bonusni tugatadi.
Shunday qilib, ikkinchi shakl - har bir WHEN qiymati / ifodasi bilan bir xil test qiymatini teng taqqoslashimiz kerak bo'lgan holatlar uchun soddalashtirilgan yozuv.
Eslatma. CASE ning birinchi va ikkinchi shakllari SQL tili standartiga kiritilgan, shuning uchun ular ko'pgina DBMSlarda qo'llanilishi kerak.
MS SQL 2012 versiyasi bilan soddalashtirilgan IIF belgisi paydo bo'ldi. U faqat 2 qiymat qaytarilganda CASE bayonotini soddalashtirish uchun ishlatilishi mumkin. IIF dizayni quyidagicha:
IIF (shart, haqiqiy_qiymat, noto'g'ri_qiymat)
Bular. Aslida, bu quyidagi CASE qurilishi uchun o'rash:
CASE WHEN sharti keyin haqiqiy_qiymat ELSE false_value END
Keling, misolni ko'rib chiqaylik:
ID, ism, ish haqi, IIF ni tanlang (Ish haqi = 2500, "Ish haqi = = 2500", "Ish haqi")< 2500") DemoIIF, CASE WHEN Salary>= 2500 UNDA "RFP> = 2500" QO'SHI "RFP< 2500" END DemoCASE FROM Employees
CASE, IIF konstruktsiyalari bir -biriga joylashtirilishi mumkin. Keling, mavhum misolni ko'rib chiqaylik:
ID, Ism, Ish haqi, Kafedrada (1,2) KEYIN BOShQA BO'LGANDA "A" ni tanlang = 3 SONRASIDA POSIDIDI joylashtirilgan holat 3dan keyin "B-1", keyin 4dan keyin "B-2" tugasa "C" "End Demo1, IIF (DepartmentID IN (1,2)," A ", IIF (DepartmentID = 3, 3dan keyin" B-1 ", 4dan keyin" B-2 "," C ") holatining holati) Demo2 Xodimlardan
CASE va IIF konstruktsiyalari natijani qaytaradigan ifodalar bo'lgani uchun biz ularni nafaqat SELECT blokida, balki ifodalarni ishlatishga ruxsat beruvchi boshqa bloklarda ham ishlatishimiz mumkin, masalan, WHERE yoki ORDER BY bandlarida.
Do'stlaringiz bilan baham: |