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
相关产品推荐
相关产品推荐

