sql - 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
解决方案
使用 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
推荐阅读
- angular - 共享服务无法从组件访问变量
- vb6 - 为什么更新现有安装时 PDW 不复制某些文件?
- javascript - 在使用 JQuery 或 JavaScript 单击按钮时将 CSS 动画添加到 h1
- c# - 为每个插入创建 EF 数据库实例?
- flutter - 参数类型“对象?” 不能分配给参数类型“num”
- c# - 获取摄像机 IP 地址
- excel - 两列之间的Excel MAX条件
- python - 如何在python dash中单击按钮时添加下拉列表的值?
- python - 试图在 SQLITE3 中为股票价格建立数据库但收到此错误
- docker - 在 docker-compose 卷中提供 GitHub 文件作为默认 conf 文件