如何从三个电话列中优先选取非空值?我的SQL CASE语句无法运行
解决SQL多字段取第一个非空值的问题
原始数据
| NAME | TELEPHONE_1 | TELEPHONE_2 | TELEPHONE_3 |
|---|---|---|---|
| Max | 00491633888 | NULL | NULL |
| Soph | NULL | NULL | NULL |
| Pes | NULL | 0049163232 | 0049111111 |
期望输出
- Max对应的结果为
00491633888 - Soph对应的结果为
NULL - Pes对应的结果为第一个非空值,即TELEPHONE_2的
0049163232
问题分析
你写的CASE语句存在语法错误,SQL中CASE结构的正确写法是连续使用WHEN...THEN...,不需要在ELSE后追加WHEN。
解决方案
方案1:修正CASE语句
SELECT NAME, CASE WHEN TELEPHONE_1 IS NOT NULL THEN TELEPHONE_1 WHEN TELEPHONE_2 IS NOT NULL THEN TELEPHONE_2 WHEN TELEPHONE_3 IS NOT NULL THEN TELEPHONE_3 ELSE NULL END AS TELEPHONE FROM test
方案2:使用COALESCE函数(更简洁)
SQL内置的COALESCE函数专门用于返回参数列表中第一个非空值,当所有参数都为空时返回NULL,完全匹配你的需求:
SELECT NAME, COALESCE(TELEPHONE_1, TELEPHONE_2, TELEPHONE_3) AS TELEPHONE FROM test
内容的提问来源于stack exchange,提问作者CodeoDE
相关产品推荐
相关产品推荐

