Mysql Case When 多列

本文介绍了一个SQL查询案例,用于从数据库中检索特定租户和实体的属性配置详情,包括属性名称、显示名称、数据类型等关键信息。
SELECT a.api_key AS '属性名称',
       a.label AS '属性显示名称',
       CASE
           WHEN a.item_type = 1 THEN '文本'
           WHEN a.item_type = 2 THEN '布尔型'
           WHEN a.item_type = 4 THEN '单选'
           WHEN a.item_type = 5 THEN '整型'
           WHEN a.item_type = 6 THEN '实数'
           WHEN a.item_type = 7 THEN '长整型'
           WHEN a.item_type = 8 THEN '日期'
           WHEN a.item_type = 9 THEN '时间'
           WHEN a.item_type = 10 THEN 'ID'
           ELSE ''
       END AS '数据类型',
       CASE
           WHEN a.is_member_only = 1 THEN '是'
           WHEN a.is_member_only = 0 THEN '否'
           ELSE ''
       END AS '会员专用',
       CASE
           WHEN a.hidden_flg = 1 THEN '隐藏'
           WHEN a.hidden_flg = 0 THEN '显示'
           ELSE ''
       END AS '显示状态',
       CASE
           WHEN a.require_flg = 1 THEN '是'
           WHEN a.require_flg = 0 THEN '否'
           ELSE ''
       END AS '是否必填',
       CASE
           WHEN a.sort_flg = 1 THEN '是'
           WHEN a.sort_flg = 0 THEN '否'
           ELSE ''
       END AS '是否分组',
       CASE
           WHEN a.description IS NULL THEN ''
           ELSE a.description
       END AS '属性值事例或说明'
FROM cdp_item a
WHERE tenant_id = 1216983876421894
  AND entity_id = 658
  AND created_by = 1345805699270860 ;

 

MySQL 中,`CASE WHEN` 语句是一种非常强大的条件控制结构,它允许根据多个条件分支来返回不同的值。`CASE WHEN` 有两种基本语法形式:**简单函数**和**搜索函数**。 ### 简单函数语法 ```sql CASE [col_name] WHEN [value1] THEN [result1] ... ELSE [default] END ``` 这种形式的 `CASE WHEN` 适用于列值与特定值直接比较的场景。 ### 搜索函数语法 ```sql CASE WHEN [expr] THEN [result1] ... ELSE [default] END ``` 这种形式的 `CASE WHEN` 更加灵活,允许使用表达式来定义条件分支。 ### 多条件 `CASE WHEN` 示例 #### 示例 1:更新多字段并处理多个条件 在 `UPDATE` 语句中,可以使用 `CASE WHEN` 来更新多个字段,并根据多个条件决定更新的值。 ```sql UPDATE your_table SET column1 = CASE WHEN condition1 THEN value1 WHEN condition2 THEN value2 ELSE default_value END, column2 = CASE WHEN condition3 THEN value3 WHEN condition4 THEN value4 ELSE default_value END; ``` 在这个例子中,`column1` 和 `column2` 都会根据不同的条件更新为不同的值。 #### 示例 2:根据条件返回不同的字段值 假设有一个学生课程表 `Studentclass`,其中包含字段 `std_id`(学号)、`class_id`(课程ID)、`main_class_flg`(主修标志)。需要查询每个学生的主修课程 ID,规则如下: - 如果学生只选择了一门课程,则返回该课程的 ID。 - 如果学生选择了多门课程,则返回主修课程的 ID。 ```sql SELECT std_id, CASE WHEN COUNT(*) = 1 THEN MAX(class_id) ELSE MAX(CASE WHEN main_class_flg = 'Y' THEN class_id ELSE NULL END) END AS main_class FROM Studentclass GROUP BY std_id; ``` 在这个查询中,`CASE WHEN` 被嵌套使用,以处理不同情况下的条件分支。 #### 示例 3:处理 `NULL` 值 在某些情况下,可能需要处理 `NULL` 值。例如,如果某个字段的值为 `NULL`,可以使用 `CASE WHEN` 返回一个默认值。 ```sql SELECT column1, CASE WHEN column2 IS NULL THEN 'Default Value' ELSE column2 END AS column2_value FROM your_table; ``` 在这个例子中,如果 `column2` 的值为 `NULL`,则返回 `'Default Value'`。 ### 注意事项 - **条件优先级**:在 `CASE WHEN` 语句中,一旦某个条件满足,后续的条件将不再检查。因此,条件的顺序非常重要。 - **避免更新为 `NULL`**:如果不希望字段在不符合条件时被更新为 `NULL`,可以使用 `ELSE` 子句返回原字段的值。 - **性能优化**:复杂的 `CASE WHEN` 语句可能会导致查询性能下降,尤其是在处理大量数据时,需要注意优化查询逻辑。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值