CASE 语句问题

问题描述 投票:0回答:1

输入如下数据:

数字 FLAG_1 FLAG_2 FLAG_3 FLAG_4 FLAG_5 FLAG_6
123456 X X X X X X

案例说明:

SELECT DISTINCT 
NUMBER,
CASE 
    WHEN FLAG_1='X' AND FLAG_2='X' AND FLAG_3='X' THEN 'PRE'
    WHEN FLAG_4='X' AND FLAG_5='X' AND FLAG_6='X' THEN 'POST'
ELSE 'NA' END
AS FLAG 

FROM TABLE

我的查询的输出:

数字 旗帜
123456

预计:

数字 旗帜
123456
123456 发帖

您能否建议如何调整 quy..

sql case teradata teradata-sql-assistant
1个回答
0
投票

由于

case
表达式 返回第一个 TRUE
when
的值,因此您的示例行将永远找不到“POST”。

适合您的情况的简单技巧是

UNION
,您有两次情况,并且条件顺序交换。

SELECT 
    NUMBER,
    CASE 
        WHEN FLAG_1='X' AND FLAG_2='X' AND FLAG_3='X' THEN 'PRE'
        WHEN FLAG_4='X' AND FLAG_5='X' AND FLAG_6='X' THEN 'POST'
        ELSE 'NA'
    END AS FLAG 
FROM TABLE
UNION
SELECT 
    NUMBER,
    CASE 
        WHEN FLAG_4='X' AND FLAG_5='X' AND FLAG_6='X' THEN 'POST'
        WHEN FLAG_1='X' AND FLAG_2='X' AND FLAG_3='X' THEN 'PRE'
        ELSE 'NA'
    END AS FLAG 
FROM TABLE
© www.soinside.com 2019 - 2024. All rights reserved.