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

SQL实现:将含'NO'值的列名输出至新增output列

问题:根据列值为NO的情况显示对应列名作为输出列

源数据

a  |b  |c  |d  |
---+---+---+---+
YES|YES|NO |YES|
NO |YES|NO |NO |
NO |NO |YES|YES|
YES|YES|YES|NO |

期望输出

a  |b  |c  |d  |output  |
---+---+---+---+--------+
YES|YES|NO |YES|C       |
NO |YES|NO |NO |A |C |D |
NO |NO |YES|YES|A |B    |
YES|YES|YES|NO |D       |

需求说明:新增的output列需根据'NO'值显示对应列名——第1行中C列值为NO,故output列显示C;第2行中A、C、D列值为NO,故output列显示A | C | D。

尝试的查询语句

select  
    A,B,C,D
    ,concat_ws('|',nullif(A,'YES'),nullif(B,'YES'),nullif(C,'YES'),nullif(D,'YES')) as output
from 
    test.tab

问题:该查询输出的是'NO'值,而非对应的列名,如何调整实现需求?


解决方案

核心思路:当列值为NO时返回对应的列名,否则返回null,再用concat_ws连接非空值(concat_ws会自动忽略null)。

调整后的查询语句:

select  
    A, B, C, D,
    concat_ws(' | ',
        case when A = 'NO' then 'A' end,
        case when B = 'NO' then 'B' end,
        case when C = 'NO' then 'C' end,
        case when D = 'NO' then 'D' end
    ) as output
from 
    test.tab

说明

  • 用case表达式替代原来的nullif:判断每个列的值是否为NO,若是则返回列名,否则返回null;
  • concat_ws(' | ', ...)会将所有非null的列名用|分隔拼接,自动过滤掉null值,正好匹配需求中只显示值为NO的列名的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:12:35