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

SQL使用CASE WHEN实现多名称列按Private字段非空值隐藏的写法咨询

错误写法问题说明

第一种写法问题

  • 单个CASE WHEN表达式只能输出一个字段值,你写的Name1 or Name2属于布尔逻辑运算,SQL没有办法通过单个CASE同时为两个字段赋值,且该写法仅对Name1做了处理,Name2未加任何隐藏逻辑,不符合需求。

第二种写法问题

  • 完全不符合CASE WHEN的语法规范,标准CASE结构为CASE WHEN 条件 THEN 返回值 ELSE 备选值 END,你写的连续THEN、未转义的带空格字段名Name 1都会直接触发语法报错。

正确实现方案

每个需要做隐藏处理的名称列,单独写一次判断逻辑即可,判断条件可以复用AM.Private IS NULL:

SELECT
  CASE WHEN AM.Private IS NULL THEN Name1 ELSE 'Name Suppressed' END AS Name1,
  CASE WHEN AM.Private IS NULL THEN Name2 ELSE 'Name Suppressed' END AS Name2,
  -- 后续有更多名称类字段,按照上面的格式追加即可
  Private
FROM AM

如果需要处理的字段数量较多,也可以先用CTE提前生成隐藏标记,避免重复写判断条件:

WITH AM_marked AS (
  SELECT
    *,
    CASE WHEN Private IS NULL THEN 0 ELSE 1 END AS need_suppress
  FROM AM
)
SELECT
  CASE WHEN need_suppress = 0 THEN Name1 ELSE 'Name Suppressed' END AS Name1,
  CASE WHEN need_suppress = 0 THEN Name2 ELSE 'Name Suppressed' END AS Name2,
  Private
FROM AM_marked

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:45:03