You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从三个电话列中优先选取非空值?我的SQL CASE语句无法运行

解决SQL多字段取第一个非空值的问题

原始数据

NAMETELEPHONE_1TELEPHONE_2TELEPHONE_3
Max00491633888NULLNULL
SophNULLNULLNULL
PesNULL00491632320049111111

期望输出

  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:52:43