sql - 带有值oracle sql的where子句中的case语句
问题描述
我正在开发 Oracle Apex 应用程序。我有一个简单的选择查询,它工作正常,但现在我想在该查询中执行 if/else 或 case 语句。
所以查询如下
select value d,
id r
from dhm_lov_data
where lov_id = 103
and nvl(isdeleted,0) = 0
and parentid_1 =:p21_typeid
order by d
我想更改此查询以添加:P21_TYPEID
值条件。例如,如果:P21_TYPEID
值是 1,那么在 where 子句中它应该是PARENTID_1 in (10,11)
else PARENTID_1 = :P21_TYPEID
。
我试图把它放在案例声明中,但它没有用。以下是我正在尝试使用案例语句进行工作的查询
SELECT VALUE d, id r FROM DHM_LOV_DATA WHERE LOV_ID= 103 and nvl(ISDELETED,0) = 0
and
case when :P21_TYPEID = 848 then PARENTID_1 in (287,288)
else PARENTID_1 = :P21_TYPEID end;
order by d
解决方案
表达式返回一个case
值,而不是您可以添加到where
子句中的条件。但是您可以使用一些布尔运算符来模拟这种行为:
SELECT value d, id r
FROM dhm_lov_data
WHERE lov_id = 103 AND
NVL(isselected, 0) = 0 AND
(:P21_TYPEID = 848 AND parentid_1 IN (287,288) OR
:P21_TYPEID = parentid_1)
ORDER BY d
推荐阅读
- python - Python游戏(骰子)
- python - 使用熊猫格式化从excel输出的日期
- html - 无法将表单中的 IMPORTXML 统计信息导入 Google 表格 - 导入的内容为空错误
- components - 如何将动画 GIF 放置在 a-frame 中?
- amazon-web-services - Apollo Express CORS 选项
- css - 在 css 中使用渐变的形状
- c# - 绑定一个嵌套在网格视图中的网格视图行
- python - pydrake中关于CompassGait的一些问题
- algorithm - Big-Oh 符号并找到合适的 c 和 n0
- ios - AutoFill 又名 Flutter 中的自动登录