
# decode1
#### 功能描述
decode1函数实现if-then-else分支选择的功能。
#### 命令格式
```
decode1(expression, search, result [, search, result]...[, default])
```
#### 参数说明
| 参数         | 是否必选 | 参数类型          | 说明                                      |
|:---|:---|:---|:---|
| expression | 是    | 所有数据类型        | 要比较的表达式。                                |
| search     | 是    | 与expression一致 | 与expression进行比较的搜索项。                    |
| result     | 是    | 所有数据类型        | search和expression的值匹配时的返回值。             |
| default    | 否    | 与result一致     | 如果所有的搜索项都不匹配，则返回default值，如果未指定，则返回NULL。 |
   
#### 返回值说明
result 和 default 为返回值，支持返回所有的数据类型。
![](https://support.huaweicloud.com/sqlref-spark-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
- 如果匹配，返回result。
- 如果没有匹配，返回default。
- 如果没有指定default，返回NULL。
- 如果search选项有重复且匹配时，会返回第一个值。
 
#### 示例代码
为便于理解函数的使用方法，本文为您提供源数据，基于源数据提供函数相关示例。创建表salary，并添加数据，命令示例如下：
```
CREATE EXTERNAL TABLE IF NOT EXISTS salary (
   dept_id STRING,  -- 部门ID
   userid STRING,   -- 员工ID
   sal INT          -- 工资
)
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
STORED AS TEXTFILE 
LOCATION 'obs://your-bucket-name/aidatalake/salary/';-- 【必填】替换为OBS桶路径（平台外表时必须指定）
```
添加数据如下：
```
INSERT INTO salary VALUES
('d1','user1',1000), 
('d1','user2',2000), 
('d1','user3',3000), 
('d2','user4',4000), 
('d2','user5',5000), 
('d3','user6',6000), 
('d4','user7',7000), 
('d5','user8',8000);
```
#### 回显结果
返回每个部门的名称
当 dept_id 的值为d1时，返回平台；值为d2时，返回MRS；其他场景返回Others。
```
select dept_id,  
decode1(dept_id, 'd1', '平台', 'd2', 'MRS', 'Others') as result from salary 
GROUP BY dept_id;  -- 按部门ID去重，确保每个部门仅返回一行
```
返回结果：
```
+-----+-------+
| dept_id| result| 
+-----+-------+
|   d1|    平台| 
|   d2|    MRS| 
|   d3| Others| 
|   d4| Others| 
|   d5| Others| 
+-----+-------+
```
