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

如何简化T-SQL SELECT查询中的该段CASE语句?

SQL CASE逻辑简化方案

需求说明

需要实现的字段计算规则:

  • 当COL_B、COL_C均不为NULL且不为空字符串时,返回CONCAT(COL_B, ' - ', COL_C)拼接结果
  • 两列中仅一列非NULL且非空时,返回该列的有效值
  • 两列均为NULL或空串时返回NULL

原实现代码

SELECT
    COL_A AS [A],
    CASE WHEN NULLIF(COL_B, '') IS NOT NULL AND NULLIF(COL_C, '') IS NOT NULL
             THEN CONCAT(COL_B, ' - ', COL_C)
         WHEN NULLIF(COL_B, '') IS NULL AND NULLIF(COL_C, '') IS NOT NULL
             THEN COL_C
         WHEN NULLIF(COL_B, '') IS NOT NULL AND NULLIF(COL_C, '') IS NULL
             THEN COL_B
     END AS [B]

更简洁的实现方式

当前写法不是唯一可行方案,利用CONCAT_WS函数的特性可以大幅简化代码,逻辑和原实现完全等价:

SELECT
    COL_A AS [A],
    CONCAT_WS(' - ', NULLIF(COL_B, ''), NULLIF(COL_C, '')) AS [B]
FROM 你的表名

逻辑说明

  • 先用NULLIF(列名, '')把空字符串统一转换为NULL,对齐原逻辑中“空串视为无效值”的判断规则
  • CONCAT_WS函数会自动跳过参数中的NULL值,不会拼接多余的分隔符:
    • 两列都有有效值:自动用' - '拼接两列,完全匹配预期格式
    • 仅一列有有效值:跳过NULL列直接返回该有效值,不会残留多余分隔符
    • 两列均为无效值:返回NULL,和原逻辑返回结果一致

低版本兼容写法

如果使用的数据库版本不支持CONCAT_WS(比如SQL Server 2016及更早版本),可以简化原CASE逻辑,减少重复判断:

SELECT
    COL_A AS [A],
    CASE 
        WHEN NULLIF(COL_B, '') IS NULL THEN NULLIF(COL_C, '')
        WHEN NULLIF(COL_C, '') IS NULL THEN COL_B
        ELSE CONCAT(COL_B, ' - ', COL_C)
    END AS [B]
FROM 你的表名

内容的提问来源于stack exchange,提问作者Patrick S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:01:57