首页 > 解决方案 > SQL - CASE 单一条件下的多个变量

问题描述

我的 SQL 中有类似于下面的内容,我希望简化 CASE WHEN 语句我有多个变量(即 CODE1、CODE2,一直到 CODE10,我想在找到任何这些代码时通过 CASE 运行我的“CODES”表创建一个“CODE_FLAG”变量。

TABLE2 将包含一个代码列表(可能有一天会更新)。因此最终结果将是从 Table1 中选择所有记录以及创建的名为 CODE_FLAG 的变量,该变量只是基于 TABLE2 中的列表的“Y”或“N”。TABLE1 有多达 10 个代码,分别列为 CODE1、CODE2、CODE3...等。

表2

代码
98761234
43216789
11111111

这是我到目前为止所拥有的。有没有办法

WITH T2,
(Select CODES
FROM TABLE2)

SELECT  T1.*,
CASE WHEN T1.CODE1, T1.CODE2, T1.CODE3, T1.CODE4 IN (T2.CODES) 
THEN 'Y', ELSE 'N' END AS CODE_FLAG
FROM TABLE1 T1
CROSS JOIN T2 T2

或者可能是这样的?

WITH T2,
(Select CODES
FROM TABLE2)

SELECT  T1.*,
CASE WHEN T1.CODE1 or T1.CODE2 or T1.CODE3 or T1.CODE4 IN (select T2.CODES from T2 T2) 
THEN 'Y', ELSE 'N' END AS CODE_FLAG
FROM TABLE1 T1

我目前有一个更长的版本

WITH T2,
(Select CODES
FROM TABLE2)

SELECT  T1.*,
CASE WHEN T1.CODE1 in (select CODES from T2) 
or T1.CODE2 in (select CODES from T2)
or T1.CODE3 in (select CODES from T2)
or T1.CODE4 in (select CODES from T2) 
THEN 'Y', ELSE 'N' END AS CODE_FLAG
FROM TABLE1 T1

标签: sqlcase

解决方案


使用 EXISTS() 检查。

SELECT
  *,
  CASE WHEN EXISTS (
      SELECT *
      FROM T2
      WHERE T2.codes IN (T1.code1, T1.code2, T1.code3, T1.code4)
    )
  THEN 'Y' ELSE 'N' END   AS code_flag
FROM
  T1

推荐阅读