מדריך T-SQL: שימוש ב-CASE


הדוגמאות בפוסט הזה מתייחסות לבסיס נתונים המבוסס על הסדרה הפופולארית "משחקי הכס" שיצרתי במיוחד עבור המדריך הזה. אם אתם רוצים להוריד אותו בעצמכם או סתם להבין מה זה בכלל אתם יכולים ללחוץ כאן

משמעות הביטוי CASE

הפקודה CASE מאפשרת לנו לייצר מעין בלוק תנאים מובנה שמאפשר לנו להגדיר סדרת תנאים או מצבים ולייצר ערך בהתאם.

ביטוי CASE תמיד מייצר לנו ערך ואינו יכול לעשות משהו מעבר לכך. מהבחינה הזאת הוא מוגבל בהרבה מתנאי IF,

שאינו מוגבל בפעולות שניתן לבצע באמצעותו.

ניתן להשתמש בביטוי CASE בתוך שאילתת SQL רגילה כדי לייצר עמודה מחושבת,

או בתוך בלוק T-SQL כדי לייצר ערך שייכנס לתוך משתנה באופן דינאמי. בפוסט הזה אסביר על שתי השיטות.


יצירת עמודה באמצעות CASE בתוך שאילתה

ביטוי CASE משמש ב-SQL כדי לייצר עמודה מחושבת כאשר הערך שמוצב בכל שורה מותנה בסדרת תנאים, לדוגמה: עמודה שתכיל סטטוס (טקסט משתנה) על פי מאזן המכירות של כל מוצר או עמודה שתכיל אחוז עמלה משתנה (מספר) על פי מספר עסקאות שביצע כל עובד. המבנה נראה בדרך כלל כך:

לדוגמה, נוכל להשתמש בקוד הבא כדי לייצר עמודה שתציג את חשיבות הבית ע"פ מספר הדמויות הפעילות ששייכות אליו.

בלוק ה-CASE (שורות 3-6) יצר לנו עמודה מחושבת שמבצעת בדיקה בכל שורה ומייצרת ערך בהתאם לתנאים שהוגדרו. התוצאה תראה כך:



מאפייני ביטוי CASE

כשכותבים ביטוי CASE בתוך שאילתה, יש לשים לב לכמה נקודות חשובות:

אין הגבלה לכמות המקרים שניתן להגדיר. השרת יעבור על התנאים לפי הסדר שבו הם כתובים וכשימצא התאמה הוא ייצר את הערך שהוגדר מבלי לבדוק תנאים נוספים. העובדה הזאת חשובה במיוחד אם התנאים שהגדרתם חופפים בצורה כלשהי ויתכן שהיא עלולה להשפיע על הסדר שבו תרצו להגדיר אותם. הביטוי יתחיל ב-CASE ויסתיים ב-END כדי לסמן את סוף הבלוק של הגדרת התנאים. ניתן (אך לא חובה) להגדיר תנאי סופי באמצעות ELSE. שורה זו תגדיר ערך ברירת מחדל שיבוא לידי ביטוי אם אף אחד מהתנאים שהוגדרו לפניו לא מתקיים. אם לא הגדרתם ELSE ובכל זאת יש לכם שורות שלא עונות על אף קריטריון, הן יקבלו NULL כערך. בגלל שמדובר בעמודה מחושבת היא תמיד תופיע ללא שם ולכן מומלץ לתת כינוי (אך גם זה לא חובה).


שימוש ב-CASE בבלוק T-SQL

בנוסף ליצירת עמודות דינמיות במשפטי SELECT, אנחנו יכולים להשתמש ב-CASE בתוך בלוק T-SQL כדי לאתחל משתנה לערך רצוי באופן דינמי על פי סדרה של תנאים. אם ניקח שוב את הדוגמה הקודמת, ניתן להשתמש בביטוי CASE כדי לבדוק את החשיבות של בית מסויים ולהחזיק את התוצאה בתוך משתנה:


בשורה 1 עד 3 מוגדרים 3 משתנים, ובשורה 5 מספר בית מוצב לבדיקה. בשורה 7 המשתנה HouseSize מקבל לתוכו את מספר הדמויות מהבית הרלוונטי ובשורה 11 מתבצעת עליו בדיקה אשר מציבה את התוצאה במשתנה Importance.






החוקים של CASE כזה זהים לחוקים שראינו בחלק הראשון של הפוסט, למעט ההמלצה לתת כינוי. המטרה כאן היא לייצר ערך שייכנס לתוך משתנה ולכן אין לכינוי שום משמעות בקונטקסט הזה.

© כל הזכויות שמורות לאלעד פלג הדרכות 2020