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
为 true 时应返回的结果。如果有多个WHEN
子句,CASE
语句会针对第一个为 true 的condition
返回result
。else_result
(可选)- 任意类型的字段或表达式。ELSE
else_result
子句用于为CASE
语句指定默认结果。如果所有WHEN
子句均不为 true,则返回此子句。如果CASE
语句没有ELSE
子句,并且所有WHEN
子句均不为 true,则CASE
语句会返回NULL
。
一个 CASE
语句只能有一个 ELSE
子句。
搜索到的 CASE
的运作方式
搜索到的 CASE
语句以 CASE
关键字开头,以 END
关键字结尾。中间会包含多个部分或条款:
WHEN
:您要评估的条件。您可以在单个CASE
语句中使用多个WHEN
子句。THEN
:如果WHEN
子句的条件为 true,则返回的结果。在CASE
语句中,每个WHEN
子句都必须对应一个THEN
子句。ELSE
:可选。如果所有WHEN
子句条件均不为 true,CASE
会返回ELSE
子句中的值,如果未指定ELSE
子句,则返回NULL
。
CASE
会计算每个连续 WHEN
子句,并在条件为 true 的情况下返回第一个结果。其余所有 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
评估逻辑 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