输入如下数据:
数字 | 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..
由于
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