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

使用CASE语句堆叠条件未返回会员全部病症的问题求助

Teradata多列布尔转单列(展示所有病症)

你的问题出在CASE语句的短路逻辑:它会按顺序判断条件,只要第一个满足的条件触发,就会返回对应结果,后面的条件不会再检查。所以即使会员同时患有多种病症,只会返回CASE里排在最前面的那个病症,去掉SELECT DISTINCT没用,因为单条记录里CASE本来就只会输出一个值。

下面给两种常用的解决方法:

方法1:拆分病症为多行记录

如果希望每个病症单独占一行,用UNION ALL分别提取每个符合条件的病症:

SELECT Member_ID, 'ASTHMA' AS DX_FLAG
FROM your_table a
WHERE a.ASTHMA_MBR = 1
UNION ALL
SELECT Member_ID, 'COPD' AS DX_FLAG
FROM your_table a
WHERE a.COPD_MBR = 1
UNION ALL
SELECT Member_ID, 'HYPERTENSION' AS DX_FLAG
FROM your_table a
WHERE a.HYPERTENSION_MBR = 1

这样有多个病症的会员会返回多条记录,每条对应一个病症。

方法2:合并所有病症到单个字符串

如果希望把同一会员的所有病症合并成一个字段(比如用逗号分隔),可以用Teradata的LISTAGG函数:

SELECT 
    Member_ID,
    LISTAGG(DX_FLAG, ', ') WITHIN GROUP (ORDER BY DX_FLAG) AS DX_FLAGS
FROM (
    -- 先拆分每个病症为单独行
    SELECT Member_ID, 'ASTHMA' AS DX_FLAG
    FROM your_table a
    WHERE a.ASTHMA_MBR = 1
    UNION ALL
    SELECT Member_ID, 'COPD' AS DX_FLAG
    FROM your_table a
    WHERE a.COPD_MBR = 1
    UNION ALL
    SELECT Member_ID, 'HYPERTENSION' AS DX_FLAG
    FROM your_table a
    WHERE a.HYPERTENSION_MBR = 1
) t
GROUP BY Member_ID

这个查询会把每个会员的所有病症按顺序拼接成一个字符串,比如同时有哮喘和高血压的会员,DX_FLAGS会显示ASTHMA, HYPERTENSION。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:15:34