

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Case 语句
<a name="iot-sql-case"></a>

Case 语句可以用于执行分支，就像 switch 语句一样。

语法：

```
CASE {{v}} WHEN {{t[1]}} THEN {{r[1]}} 
  WHEN {{t[2]}} THEN {{r[2]}} ... 
  WHEN {{t[n]}} THEN {{r[n]}} 
  ELSE {{r[e]}} END
```

评估表达式 {{`v`}}，并与每个 `WHEN` 子句的 {{`t[i]`}} 值进行相等匹配。如果找到匹配，相应的 {{`r[i]`}} 表达式会成为 `CASE` 语句的结果。按顺序评估 `WHEN` 子句，这样，如果有多个匹配子句，第一个匹配子句的结果将成为 `CASE` 语句的结果。如果没有匹配，`ELSE` 子句的 {{`r[e]`}} 就是结果。如果没有匹配项且没有 `ELSE` 子句，则结果为 `Undefined`。

`CASE` 语句至少需要一个 `WHEN` 子句。`ELSE` 子句是可选的。

例如：

传入有效载荷已发布至主题 `topic/subtopic`：

```
{
    "color":"yellow"
}
```

SQL 语句：

```
SELECT CASE color
        WHEN 'green' THEN 'go'
        WHEN 'yellow' THEN 'caution'
        WHEN 'red' THEN 'stop'
        ELSE 'you are not at a stop light' END as instructions
    FROM 'topic/subtopic'
```

生成的传出有效载荷为：

```
{
    "instructions":"caution"
}
```

**注意**  
如果 {{`v`}} 是 `Undefined`，则 Case 语句的结果为 `Undefined`。