CASE (Searched)
הצהרות CASE בודקות תנאי אחד או יותר ומחזירות תוצאה כשהתנאי הראשון מתקיים, או תוצאת ברירת מחדל אם אף אחד מהתנאים לא מתקיים.
מידע נוסף זמין במאמר בנושא IF.
דוגמאות לשימוש
שימוש נפוץ ב-CASE הוא ליצירת קטגוריות חדשות או קיבוצים חדשים של נתונים. לדוגמה, כדי לקבץ ערכים של מדינות נבחרות למאפיין 'אזור מכירה', אפשר ליצור הצהרת CASE כזו:
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
תחביר
CASE
WHEN condition THEN result
[WHEN condition THEN result]
[...]
[ELSE else_result]
END
פרמטרים
condition– שדה או ביטוי לוגי. סעיפיWHENבודקים אתconditionומחזירים את הערך True אם התנאי שצוין מתקיים, או את הערך False אם התנאי לא מתקיים.
result– שדה או ביטוי מכל סוג. לכל פסקה שלWHENצריכה להיות פסקה תואמת שלTHEN, שמציינת את התוצאות אם התנאיWHEN conditionמתקיים. אם יש כמה סעיפיWHEN, הפונקציהCASEמחזירה את הערךresultשל התנאיconditionהראשון שמתקיים.
else_result(אופציונלי) – שדה או ביטוי מכל סוג. הפסקהELSEelse_resultמציינת תוצאת ברירת מחדל עבור ההצהרהCASE. הסעיף הזה מוחזר אם אף אחד מהסעיפיםWHENלא נכון. אם הצהרתCASEלא כוללת סעיףELSE, ואף אחד מהסעיפיםWHENלא נכון, ההצהרהCASEמחזירהNULL.
לכל הצהרת CASE יכול להיות רק סעיף ELSE אחד.
איך פועל החיפוש CASE
משפט חיפוש CASE מתחיל במילת המפתח CASE ומסתיים במילת המפתח END. בין לבין, יהיו כמה קטעים או סעיפים:
-
WHEN: תנאי שרוצים להעריך. אפשר לכלול כמה סעיפיWHENבהצהרתCASEאחת. -
THEN: התוצאה שמוחזרת אם התנאי של סעיףWHENהוא true. צריך להוסיף פסוקיתTHENאחת לכל פסוקיתWHENבהצהרתCASE. -
ELSE: אופציונלי. אם אף אחד מהתנאים של סעיףWHENלא מתקיים, הפונקציהCASEמחזירה את הערך בסעיףELSE, או את הערךNULLאם לא מצוין סעיףELSE.
הפונקציה CASE בודקת כל סעיף WHEN ברצף ומחזירה את התוצאה הראשונה שבה התנאי מתקיים. לא מתבצעת הערכה של סעיפי WHEN שנותרו ושל תוצאת ELSE. אם כל התנאים WHEN הם FALSE או NULL, הפונקציה CASE מחזירה את התוצאה ELSE, או אם אין פסקה ELSE, היא מחזירה NULL.
דוגמאות
בדיקת אי-שוויון
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
סיווג של ערכים מספריים של מאפיינים למאגרי מידע נפרדים
לדוגמה, אתם יכולים להפריד בין הזמנות לפי הסכום שלהן: 'קטן', 'בינוני' או 'גדול':
CASE
WHEN Amount < 20 THEN "Small"
WHEN Amount >= 20 and Amount < 100 THEN "Medium"
WHEN Amount >= 100 THEN "Large"
END
סיווג ערכים של מאפיין תאריך למאגרי מידע נפרדים
לדוגמה, אפשר לחלק שנה לסמסטרים על סמך תאריכים ספציפיים:
CASE
WHEN Date >= DATE(2018, 9, 23) and Date < DATE(2018, 12, 13) THEN "Fall Semester 2018"
WHEN Date >= DATE(2018, 1, 3) and Date < DATE(2019, 3, 21) THEN "Winter Semester 2019"
WHEN Date >= DATE(2019, 3, 27) and Date < DATE(2019, 6, 12) THEN "Spring Semester 2019"
ELSE "Uncategorized"
END
הערכה של תנאי AND לוגי
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
הערכת תנאי לוגי AND/OR
CASE
WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*")
AND is_livestream = TRUE
OR Video Length > 600
THEN "GA Livestream or long video"
END
החזרה של שדה או ערך אחרים בהתאם לערך פרמטר
דוגמה 1: החזרת מאפיין על סמך ערך הפרמטר שנבחר. אתם יכולים להשתמש בטכניקה הזו כדי לאפשר למשתמשים לשנות את מאפיין הפירוט שמשמש בתרשים.
CASE
WHEN Breakdown = "Product Category" THEN Product Category
WHEN Breakdown = "Store" THEN Store
END
אפשר גם לכתוב את זה באמצעות תחביר פשוט של CASE:
CASE Breakdown
WHEN "Product Category" THEN Product Category
WHEN "Store" THEN Store
END
דוגמה 2: החזרת מדד אחר על סמך ערך פרמטר.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
הצהרות משובצות בנושא CASE
אפשר להשתמש בהצהרות CASE כדי ליצור לוגיקה מורכבת יותר של הסתעפות:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN
CASE WHEN Color = "blue"
THEN "BLUE HAT" ELSE "JUST A HAT"
END
ELSE "NOT A HAT"
END