首页 > 解决方案 > PL/SQL Case When - 将输入映射到其他列值

问题描述

我在 Stack 的其他地方检查过,但找不到类似的情况。

我想将 PL/SQL 过程中的 1 个输入映射到 MY_TABLE 中的 3 个不同值;否则我只想过滤输入。我想要一个类似于以下伪代码的解决方案

SELECT * FROM MY_TABLE
WHERE COLUMN 1 = 'B'
AND CASE WHEN p_input = 'F' THEN COLUMN_1 IN ('F','A','B')
         ELSE COLUMN_1 = p_input;

标签: sqloracleplsql

解决方案


如果您正在学习如何使用case..wheninwhere子句,那么以下是代码:

CASE WHEN p_input = 'F' AND COLUMN_1 IN ('F','A','B') THEN 1
     WHEN COLUMN_1 = p_input THEN 1
END = 1

但是正如其他答案中所建议的那样,建议使用并且在第二个条件中or使用否定条件总是一个好主意,同时使用如下:p_input <> 'F'OR

( 
(p_input = 'F' AND COLUMN_1 IN ('F', 'A', 'B'))
OR
(p_input <> 'F' AND COLUMN_1 = p_input)
)

推荐阅读